我無法弄清楚如何使用has_many:through關係創建嵌套窗體。我使用了這個,我看着this tutorial以及Stack Overflow和Google其他地方的許多問題。使用has_many在Rails中嵌套窗體:通過
我想通過文章窗體創建標籤的方法。我的代碼已經通過大量基於從許多不同的來源,其中沒有一個信息反覆的去工作過,但現在我有
一種物品
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
新在我的文章類s_controller.rb是這樣的:
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
而我的文章的形式是目前這樣的(我已經來回嵌套fields_for之間:標籤fields_for內:article_tags或只是讓他們對自己) :
<%= 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選擇現有的標籤,並試圖在同一時間也創造了一個新的標籤後,請求參數:
已啓動POST「/ articles」for 127.0.0.1 at 2011-08-10 19:05:46 +1000 通過ArticlesController處理#以HTML格式創建 參數:{「utf8」=>「✓」,「authenticity_token」= >「5CQuV4RWfFZD1uDjv1DrZbIe + GB/sDQ6yiAETZutmZ4 =」,「article」=> {「heading」=>「Test heading」,「content」=>「Test Content」,「tag_ids」=> [「3」],「article_tags」 => {「tags」=> {「tag_name」=>「Test tag」}}},「commit」=>「提交」 } 用戶負載(0.2ms)選擇「用戶」。 SELECT「tags」。* FROM「tags」WHERE「tags」。「id」= 3 LIMIT 1 AREL(0.4ms)INSERT INTO「articles」(「content」,「user_id」,「created_at」,「updated_at」, ('Test Content',1,'2011-08-10 09:05:46.228951','2011-08-10 09:05:46.228951') ,'Test heading',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') [回形針]保存附件。 重定向到212ms
找到[本地主機] 完成302如果我補充:article_tags到attr_accessible的文章,然後再試一次,我得到:
開始POST 「/篇」 爲127.0.0。1 at 2011-08-10 19:11:49 +1000 通過ArticlesController進行處理#創建爲HTML 參數:{「utf8」=>「✓」,「authenticity_token」=>「5CQuV4RWfFZD1uDjv1DrZbIe + GB/sDQ6yiAETZutmZ4 =」,「文章「=> {」heading「=>」Test heading「,」content「=>」Test content「,」tag_ids「=> [」3「],」article_tags「=> {」tags「=> {」tag_name 「=>」Test tag「}}},」commit「=>」Submit「} 用戶負載(0.2ms)SELECT」users「。* FROM」users「WHERE」users「。」id「= 1 LIMIT 1 標籤加載(0.4ms)SELECT「tags」。* FROM「tags」WHERE「tags」。「id」= 3 LIMIT 1 已完成119ms
ActiveRecord :: AssociationTypeMismatch(ArticleTag(#2165285820)expected,got Array (#2151973780)): app/controllers/articles_controller.rb:32:在`create'
謝謝你,但它仍然沒有奏效。它會創建沒有錯誤的新文章,但不會創建或分配新標籤。 – Kelly
提交表單後,發送請求參數。 – Hck
我編輯了我的問題;讓我知道如果你不是你正在尋找的東西。謝謝參觀。 – Kelly