如果这是一个n00b问题,我对rails很新并道歉。
我正在制作强制性配方管理网站,并希望每个配方都有一个标签列表(标签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
基本上每个配方都有一个通过链接连接器表的标签列表,反之亦然。配方表单接受标签的嵌套属性。我想要的行为是不将复制的标签输入到标签表中,而只是创建一个指向已存在标签的新链接。因此,如果我有一个名为“健康”的标签并输入一个新配方并添加标签“健康”,我不希望在标签表中复制“健康”标签。所需要的只是将新配方链接到旧标签的链接表中的新条目。
这样做的“轨道”方法是什么。现在我试图通过将隐藏输入字段中的recipe_id传递到:reject_if lambda并在那里保存新链接来破解它。它适用于编辑现有配方,但不适用于创建新配方,因为还没有recipe.id。这感觉就像一个糟糕的方法,我只是不知道该怎么做。任何帮助表示赞赏。
答案 0 :(得分:1)
我认为你的问题在这里得到解答:accepts_nested_attributes_for with find_or_create?
答案 1 :(得分:0)
你能仔细检查你的模特设计吗? Recipe和Tag似乎是通过Link关系而不是has_many来实现HABTM。一旦你有了,复制问题应该解决/易于解决。