我是新來的鐵軌道歉,如果這是一個n00b問題。has_many accept_nested_attributes_for關聯問題
我正在制定強制性配方管理網站,並希望每個配方都有一個標籤列表(其中標籤db只包含名爲「name」的字符串)。這裏是我的模型給你一些背景:
class Recipe < ActiveRecord::Base
has_many :links
has_many :tags, :through => :links
validates :name, :ingredients, :directions, :presence => true
accepts_nested_attributes_for :tags,
:allow_destroy => true,
:reject_if => :reject_tag
def reject_tag(a)
...
end
end
class Tag < ActiveRecord::Base
has_many :links
has_many :recipes, :through => :links
end
class Link < ActiveRecord::Base
belongs_to :recipe
belongs_to :tag
end
基本上每個配方都有通過鏈路連接器表,反之亦然的標籤列表。配方表單接受標籤的嵌套屬性。我想要的行爲是將重複標籤不輸入到標籤表中,但只創建一個指向已存在標籤的新鏈接。所以如果我有一個名字爲「健康」的標籤,並輸入一個新配方,並添加標籤「健康」,我不想在標籤表中複製「健康」標籤。所有需要的是在鏈接表中將新配方鏈接到舊標籤的新條目。
什麼是'rails'的方法來做到這一點。現在我試圖通過將隱藏的輸入字段中的recipe_id傳入:reject_if lambda並在那裏保存一個新鏈接來破解它。它適用於編輯現有配方,但不適用於創建新配方,因爲尚無recipe.id。這感覺像一個不好的方法,我只是不知道如何去做這件事。任何幫助表示讚賞。
非常感謝,這正是我一直在尋找的! – danh32 2011-02-25 14:55:42