1

has_many:throughの関係を使用してネストされたフォームを作成する方法がわかりません。私はこれをとし、this tutorialを見て、Stack OverflowやGoogleの他の場所で多くの質問をしました。has_manyを使用したRailsのネストされたフォーム:through

私は記事フォームを使ってタグを作成する方法を作っています。私のコードは、さまざまなソースと、それらのどれものロットからの情報に基づいて反復回数をたくさん経験してきた仕事をしているが、今の私は

記事

class Article < ActiveRecord::Base 
    attr_accessible :content, :heading, :image, :tag_ids, :tags, :tag_name, :tag_attributes 

    belongs_to :user 
    has_many :comments, :dependent => :destroy 
    has_many :article_tags 
    has_many :tags, :through => :article_tags 
    accepts_nested_attributes_for :tags, :reject_if => proc { |attributes| attributes['tag_name'].blank? } 
... 
end 

タグ用のクラスのクラスを持っている

class Tag < ActiveRecord::Base 
    attr_accessible :tag_name 

    has_many :article_tags 
    has_many :articles, :through => :article_tags 
end 

私の記事でarticle_tags

class ArticleTag < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :tag 
end 

新のためのクラス(私はfields_forをネストの間で前後に行っている:fields_for内部タグ:article_tagsまたはちょうどそれらが自分であることせ)

def new 
    @article = Article.new 
    @tags = Tag.find(:all) 
    article_tag = @article.article_tags.build() 
    @article_tags = @article.tags.all 
    @article.article_tags.build.build_tag 
    3.times do 
     article_tag = @article.article_tags.build() 
    end 
end 

そして記事のための私のフォームは、現在、このようなものです:s_controller.rbはこのようなものです:

<%= form_for @article , :html => { :multipart => true } do |f| %> 
...excerpted... 
<%= f.fields_for :article_tags do |t| %> 
    <%= t.fields_for :tags do |ta| %> 
    <%= ta.label :tag_name, "Tag name" %> 
    <%= ta.text_field :tag_name %> 
    <% end %> 
<% end %> 

これはおそらく乱雑です。私はこれでかなり新しいし、私はそれを把握しようとしています。 articles_controllerの作成に何か追加する必要がありますか?それはattr_accessibleと関係がありますか?それとも全く違う何かをしなければならないのですか?

編集:ここでは

のHckによって提案された変更を行うと、新しい記事を作成し、TAG_ID 3で既存のタグを選択しても、同時に新しいタグを作成しようとした後、リクエストパラメータは以下のとおりです。

2011年8月10日19時05分46秒で127.0.0.1のPOSTが開始されました。投稿記事数: {"utf8" => "✓"、 "authenticity_token" = > "テストの見出し"、 "コンテンツ" => "テストコンテンツ"、 "tag_ids" => ["3"]、 "article_tags"> "5CQuV4RWfFZD1uDjv1DrZbIe + GB/sDQ6yiAETZutmZ4 ="、 "article" => => {"tags" => {"tag_name" => "テストタグ"}}}、 "commit" => "Submit" } ユーザー負荷(0.2ms)SELECT "users"。* FROM "users" where "users"。 "id" = 1 LIMIT 1 警告:保護された属性を割り当てることはできません:article_tags タグの読み込み(0.4ms) ID "= 3 LIMIT 1 AREL(0.4ms)INSERT INTO" articles "(" content "、" user_id "、" created_at "、" updated_at "、" ( 'テストコンテンツ'、1、 '2011-08-10 09:05:46.228951'、 '2011-08-10 09:05:46.228951'、「イメージファイル名」、「image_content_type」、「image_file_size」) 、 'NULL'、NULL、NULL) AREL(0.2ms)INSERT INTO "article_tags"( "article_id"、 "tag_id"、 "created_at"、 "updated_at")VALUES(88、3、 '2011-08 -10 09:05:46.243076 '、' 2011-08-10 09:05:46.243076 ') [paperclip]添付ファイルを保存しています。 212ms

で発見された[ローカルホスト] 完了302にリダイレクトされ、私が追加した場合:記事のためのattr_accessibleにarticle_tagsをして、再試行してください、私が手:

は127.0.0のための "/記事" POSTを開始。1 at 2011-08-10 19:11:49 +1000 ArticlesController#by HTML で処理するパラメータ:{"utf8" => "✓"、 "authenticity_token" => "5CQuV4RWfFZD1uDjv1DrZbIe + GB/sDQ6yiAETZutmZ4 ="、 " "" = "{" tag "}"、 "article_tags" => {"tag" => {"tag_name "=>"テストタグ "}}}、"コミット "=>"送信 "} ユーザ負荷(0.2ms)SELECT" users "。* FROM" users "WHERE" users "。" id "= 1 LIMIT 1 "ID" = 3 LIMIT 1 119時間で完了

ActiveRecord :: AssociationTypeMismatch(ArticleTag(#2165285820)、配列を取得しました) (#2151973780)): app/controllers/articles_controller.rb:32: `create '

答えて

0

コントローラーの動作で@article.article_tags.build.build_tag@article.tags.buildに置き換えてみてください。

+0

を見てみることができますので、私はまた、ネストされたフォームに関するブログ記事を書いたありがとうございましたが、それはまだ動作しませんでした。新しいアーティクルがエラーなしで作成されますが、新しいタグは作成または割り当てられません。 – Kelly

+0

フォームplsを送信した後、リクエストパラメータを送信します。 – Hck

+0

私は私の質問を編集しました。あなたが探していたものでないなら、私に知らせてください。見ていただきありがとうございます。 – Kelly

0

私は記事タグをそれに入れ子にする必要はないと思います。記事タグは、記事とタグの関連付けに過ぎません。記事にすでに関連付けられているため、記事内に新しいタグを作成することができます。私はそれが "accepts_nested_attributes"の魔法から来たものだと信じています。これを試して。

また、プライベートパラメータを使用して各属性を1つずつ保存する代わりに、大量に割り当ててください。前にネストされたフォームの問題があったので、私は自分のコードを書いた方法を見てみることができます: Cannot save record to database RAILS nested forms

私がそこに残した唯一の事は私があなたに勧めた部分でした。

private 
    def venue_params 
     params.require(:venue).permit(:name, :address, :discount, :latitude, :longitude, :tags_attributes =>[:name],:tag_ids => []) 
    end 

あなたはそれであまりにも

http://minling.github.io/

関連する問題