2011-02-24 103 views
2

我是新來的鐵軌道歉,如果這是一個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。這感覺像一個不好的方法,我只是不知道如何去做這件事。任何幫助表示讚賞。

回答

0

你可以仔細檢查你的模型設計?食譜和標籤似乎通過鏈接關係而不是has_many通過兩種方式獲得HABTM。一旦你有了,重複問題應該解決/容易解決。

+0

感謝您的答覆,但我不知道我完全理解你。每個配方可以有多個標籤,每個標籤可以屬於多個配方。我是否隱含地將其建模爲HABTM?兩種方式中的'has_many'意味着什麼? – danh32 2011-02-24 19:34:53