繁体   English   中英

Ruby on Rails-多对多关系

[英]Ruby on Rails - n:m many-to-many relation

我有两个对象,即配方和成分。
我已经使用创建了它们

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

然后,您可以添加到模型中:

Ingredient.rb

has_and_belongs_to_many :recipe

Recipe.rb

has_and_belongs_to_many :ingredients

或者,如果您想向连接添加其他属性(例如,数量),则可以为其生成模型。

rails g model ingredients_recipes ingredient_id:integer recipient_id:integer

这是一个很棒的教程,展示了使用many_to_many关系的两种方法: http ://railscasts.com/episodes/47-two-many-to-many

您可以执行rails generate migration create_join_table_ingredient_recipe ingredient recipe ,该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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM