6

レシピと材料の2つのオブジェクトがあります。
私はそれらを使用して作成しました

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

私も:m関係(多対多)でそれらを作成したいと思います。
どうすればいいのですか?別の足場を作成する必要がありますか?ありがとう。

4

3 に答える 3

11

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

rails g migration ingredients_recipes ingredient_id:integer recipient_id:integer

次に、モデルに以下を追加できます。

成分.rb

has_and_belongs_to_many :recipe

レシピ.r​​b

has_and_belongs_to_many :ingredients

または、接続に他のプロパティ (数量など) を追加する場合は、そのためのモデルを生成できます。

rails g model ingredients_recipes ingredient_id:integer recipient_id:integer
于 2012-04-27T13:11:15.490 に答える
5

これを実行する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
于 2015-12-11T12:56:05.773 に答える
5

これは、many_to_many 関係を使用するための 2 つの方法を示す優れたチュートリアルです: http://railscasts.com/episodes/47-two-many-to-many

于 2012-04-27T13:11:44.670 に答える