在我的rails项目中,我有三个模型:
class Recipe < ActiveRecord::Base
has_many :recipe_categorizations
has_many :category, :through => :recipe_categorizations
accepts_nested_attributes_for :recipe_categories, allow_destroy: :true
end
class Category < ActiveRecord::Base
has_many :recipe_categorizations
has_many :recipes, :through => :recipe_categorizations
end
class RecipeCategorization < ActiveRecord::Base
belongs_to :recipe
belongs_to :category
end
通过这个简单的has_many:通过设置,我该如何处理给定的配方:
@recipe = Recipe.first
并根据现有类别向此配方添加类别,并在相应类别上更新。
所以:
@category = #Existing category here
@recipe.categories.build(@category)
然后
@category.recipes
将包含@recipe?
我问这个的原因是因为我试图通过gem rails_admin来实现这种行为,每次我创建一个新的配方对象时,指定它的类别的表单就是创建一个新类别的表单,而不是而不是将现有的一个附加到这个食谱。
因此,了解ActiveRecord如何将现有记录与many_to_many关系中新创建的记录相关联将会很有帮助。
感谢。
答案 0 :(得分:11)
build方法足够接近new
方法,用于创建新记录。
如果您需要将当前category
添加到@recipe.categories
,则只需:
@recipe.categories << @category
这将在RecipeCategorization
表中添加一条记录(自动保存)。
现在@category.recipes
将包含@recipe