2012-04-27 17 views
4

私は2つのオブジェクトすなわちrecipe &の要素を持っています。
私はあまりにもn個でそれらを作成したいRuby on Rails - n:m多対多の関係

rails generate scaffold ingredient id:integer name:string 
rails generate scaffold recipe id:integer name:string 

を使用して作成した:Mの関係(多対多)。
どうすればよいですか?私は別の足場を作成する必要がありますか?おかげさまで

答えて

9

いいえ、移行を生成して結合表を作成する必要があります。

rails g migration ingredients_recipes ingredient_id:integer recipient_id:integer 

その後、あなたはあなたのモデルに追加することができます。

Ingredient.rb

has_and_belongs_to_many :recipe 

Recipe.rb

has_and_belongs_to_many :ingredients 

をそれともに他のプロパティを追加したい場合(例:Quantity)、そのモデルを生成することができます。ここで

rails g model ingredients_recipes ingredient_id:integer recipient_id:integer 
+0

がありましたか? – Jeb

+0

それは空のrbファイルを作成しただけです。-def up end def down end。 – Jeb

4

あなたが好き、あなたはインデックスと外部キーを含めるように変更することができます移行ファイルを生成しますrails generate migration create_join_table_ingredient_recipe ingredient recipeを実行することができます。

class CreateJoinTableIngredientRecipe < ActiveRecord::Migration 
    def change 
    create_join_table :ingredients, :recipes do |t| 
     t.index [:ingredient_id, :recipe_id] 
     t.index [:recipe_id, :ingredient_id] 
    end 
    add_foreign_key :ingredients_recipes, :ingredients 
    add_foreign_key :ingredients_recipes, :recipes 
    end 
end 

次に、あなたはmodels/ingredient.rbに追加することができます。

has_and_belongs_to_many :recipe 

と逆:最初に、私は足場を作成したときにそれを行う方法は

has_and_belongs_to_many :ingredients 
関連する問題