为什么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_keyindex是完全不同的东西(你可以从他们的名字判断)。

所以没有任何改变,你仍然可以使用两个。

您可以查看这些文档,以获取有关在迁移中建立关联的更多信息。

indexforeign_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 ,因为它是默认的。