为什么Rails 5将“索引”改为“外键”?
如果你在Rails 4中有这个:
t.references :event, index: true
现在你可以在Rails 5中使用foreign_key
而不是index
。我不太明白为什么他们决定这样做,因为function保持不变,你要添加的是INDEX,而不是该列的FOREIGN KEY。
在Rails 5中 – 当我们引用模型时,会自动创建foreign_key
索引。
Rails 5中的迁移API已更改 –
Rails 5已更改迁移API,因此即使在运行迁移时, null: false
选项也未传递给时间戳,因此会自动为时间戳添加null。
同样,我们几乎在所有情况下都希望引用列的索引。 所以Rails 5不需要引用index: true
。 运行迁移时,将自动创建索引。
作为一个例子 – (从http://blog.bigbinary.com/2016/03/01/migrations-are-versioned-in-rails-5.html复制)
当你运行rails g model Task user:references
Rails 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
并且轨道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
foreign_key
和index
是完全不同的东西(你可以从他们的名字判断)。
所以没有任何改变,你仍然可以使用两个。
您可以查看这些文档,以获取有关在迁移中建立关联的更多信息。
index
和foreign_key
是不同的概念,即使在Rails 5中也是如此。所以说rails 5将“index”改为“foreign key”是错误的。
从Rails 4到Rails 5的变化是index
选项变为true
,因此您不需要设置它。
方法add_reference在rails 4.2.5中
:指数
添加适当的索引。 默认为false。
rails 5.2中的方法add_reference
:指数
添加适当的索引。 默认为true。 有关此选项的用法,请参阅add_index。
这就是为什么当你在rails 5迁移中生成references
时,你没有看到index: true
,因为它是默认的。