2014-10-31 58 views
4

在我的軌道項目中,我有三個型號:ActiveRecord如何將現有記錄添加到has_many中的關聯:通過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來實現這種行爲,並且每次創建新的recipe對象時,指定它的類別的表單都是創建新類別的表單,而不是將現有的附加到這個配方。

因此,瞭解ActiveRecord如何將現有記錄與many_to_many關係中新創建的記錄相關聯會有所幫助。

謝謝。

回答

9

build方法已經足夠接近new方法,用於創建新記錄。

,如果你需要添加一個當前category@recipe.categories,你只需要:

@recipe.categories << @category 

這將在RecipeCategorization表(自動保存它)添加一條記錄。

現在@category.recipes將包括@recipe

+0

謝謝! Isnt <<移位運算符? – 2014-10-31 01:36:00

+0

看看[has_many](http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many) – mohameddiaa27 2014-10-31 01:42:21

+0

@AdamBronfin不是真的。 http://stackoverflow.com/questions/6852072/what-does-mean-in-ruby – 2017-02-08 07:41:05

相關問題