我创建了两个模型,称为Restaurant和menu,以及Restaurant 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>然后我检查了migration和schema,在Rails5迁移中,references变成了
#Menu migration
...
t.references :restaurant, foreign_key: true我想在Rails4里,我会觉得
t.references :restaurant, index: true这就是我不能创造我的原因吗?
更新
这是迁移文件
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发布于 2016-07-27 04:30:17
您无法创建菜单,因为您的迁移在restaurant_id上包含一个外键约束,这意味着没有餐厅就无法创建菜单(同样,如果存在关联菜单,则无法销毁餐厅)。如果这是您的意图,您需要在创建菜单时提供一个有效的restaurant_id,或者通过restaurant上的关联来创建它
@restaurant.menus.create(name: 'test1')如果不需要外键约束,则修改迁移并删除:foreign_key选项。如果这样做,请将:index选项设置为true。
https://stackoverflow.com/questions/38602854
复制相似问题