レシピと材料の2つのオブジェクトがあります。
私はそれらを使用して作成しました
rails generate scaffold ingredient id:integer name:string
rails generate scaffold recipe id:integer name:string
私も:m関係(多対多)でそれらを作成したいと思います。
どうすればいいのですか?別の足場を作成する必要がありますか?ありがとう。
レシピと材料の2つのオブジェクトがあります。
私はそれらを使用して作成しました
rails generate scaffold ingredient id:integer name:string
rails generate scaffold recipe id:integer name:string
私も:m関係(多対多)でそれらを作成したいと思います。
どうすればいいのですか?別の足場を作成する必要がありますか?ありがとう。
いいえ、移行を生成して結合テーブルを作成する必要があります。
rails g migration ingredients_recipes ingredient_id:integer recipient_id:integer
次に、モデルに以下を追加できます。
成分.rb
has_and_belongs_to_many :recipe
レシピ.rb
has_and_belongs_to_many :ingredients
または、接続に他のプロパティ (数量など) を追加する場合は、そのためのモデルを生成できます。
rails g model ingredients_recipes ingredient_id:integer recipient_id:integer
これを実行する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
そして逆にmodels/recipe.rb
:
has_and_belongs_to_many :ingredients
これは、many_to_many 関係を使用するための 2 つの方法を示す優れたチュートリアルです: http://railscasts.com/episodes/47-two-many-to-many