Ruby on Rails - n:m多对多关系
问题描述:
我有两个对象,即配方&成分。
我一直在使用Ruby on Rails - n:m多对多关系
rails generate scaffold ingredient id:integer name:string
rails generate scaffold recipe id:integer name:string
我想太多了N新建他们创造他们: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
答
可以执行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
是有办法的时候我已经创建了最初的支架做呢? – Jeb 2012-04-27 15:00:21
它创建了一个空的rb文件,只包含 - def up end def down end。 – Jeb 2012-04-27 15:27:22