我有两个对象,即配方和成分。
我使用创建它们
rails generate scaffold ingredient id:integer name:string
rails generate scaffold recipe id:integer name:string
我也想用:m 关系(多对多)创建它们。
我该怎么做?我应该创建一个不同的脚手架吗?谢谢。
我有两个对象,即配方和成分。
我使用创建它们
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
或者,如果您想为连接添加其他属性(例如 Quantity),则可以为其生成模型。
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
它将生成一个迁移文件,您可以对其进行修改以包含索引和外键,例如:
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