Rails5添加引用创建一对多

Rails5 add references to create one to many

我创建了两个模型调用 Restaurantmenu,以及餐厅 has_many 菜单。 我通过输入

创建菜单
rails g model Menu name restaurant:references

但我发现我无法按类型创建菜单 Menu.create(name: "test1")

m1 = Menu.create(name: "test1")
   (0.2ms)  BEGIN
   (0.2ms)  ROLLBACK
 => #<Menu id: nil, name: "test1", restaurant_id: nil, created_at: nil, updated_at: nil>

然后我检查了 migrationschema,在 Rails5 迁移中 references 变成了这个

#Menu migration
...
t.references :restaurant, foreign_key: true

我认为在 Rails4 中,它会像

t.references :restaurant, index: true

这是我无法创建 meun 的原因吗?

更新

这是迁移文件

class CreateMenus < ActiveRecord::Migration[5.0]
  def change
    create_table :menus do |t|
      t.string :name
      t.references :restaurant, foreign_key: true

      t.timestamps
    end
  end
end

您无法创建菜单,因为您的迁移包含 restaurant_id 上的外键约束,这意味着没有餐厅就无法创建菜单(类似地,如果相关联的菜单无法销毁餐厅存在)。如果这是您的意图,您需要在创建菜单时提供有效的 restaurant_id 或通过 restaurant

上的关联创建菜单
@restaurant.menus.create(name: 'test1')

如果不需要外键约束,修改迁移,去掉:foreign_key选项。如果这样做,请将 :index 选项设置为 true。