如果你有这个Rails中4:为什么Rails 5将“索引”更改为“外键”?
t.references :event, index: true
现在你可以使用foreign_key
,而不是index
在Rails的我真的不明白为什么他们决定这样做,因为功能保持不变,有什么你添加的是一个INDEX,而不是该列的FOREIGN KEY。
如果你有这个Rails中4:为什么Rails 5将“索引”更改为“外键”?
t.references :event, index: true
现在你可以使用foreign_key
,而不是index
在Rails的我真的不明白为什么他们决定这样做,因为功能保持不变,有什么你添加的是一个INDEX,而不是该列的FOREIGN KEY。
在导轨5 - 当我们引用一个模型,被自动创建的foreign_key
索引。
迁移API在Rails的5已经改变 -
Rails的5改变了迁移API,因为其时的迁徙运行,那么不为空时自动添加时间戳即使null: false
选项不传递给时间戳。
同样的,我们希望在几乎所有情况下,引用的列的索引。所以Rails 5不需要引用index: true
。当运行迁移时,索引会自动创建。
为例 - (复制从http://blog.bigbinary.com/2016/03/01/migrations-are-versioned-in-rails-5.html)
当您运行rails g model Task user:references
轨道4将产生
class CreateTasks < ActiveRecord::Migration
def change
create_table :tasks do |t|
t.references :user, index: true, foreign_key: true
t.timestamps null: false
end
end
end
和Rails 5将产生
class CreateTasks < ActiveRecord::Migration[5.0]
def change
create_table :tasks do |t|
t.references :user, foreign_key: true
t.timestamps
end
end
end
非常详细的答案。但是,如果出于任何原因,我不希望该索引被索引?还是它仍然隐式地在Rails 4中索引,即使我只有't.references:user,foreign_key:true'? ---现在,我想知道他们为什么甚至没有忽略'foreign_key:true'。 –
老实说,我不要不理解你的问题,索引选项增加了一个数据库i ndex,外键加一个数据库外键。 –