ActiveRecord如何将现有记录添加到has_many中的关联:通过rails中的关系?

时间:2014-10-31 00:03:15

标签: ruby-on-rails ruby activerecord many-to-many rails-admin

在我的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关系中新创建的记录相关联将会很有帮助。

感谢。

1 个答案:

答案 0 :(得分:11)

build方法足够接近new方法,用于创建新记录。

如果您需要将当前category添加到@recipe.categories,则只需:

@recipe.categories << @category

这将在RecipeCategorization表中添加一条记录(自动保存)。

现在@category.recipes将包含@recipe