为什么 Rails 5 将 "index" 更改为 "foreign key"?
Why did Rails 5 changed "index" to "foreign key"?
如果你在 Rails 4:
t.references :event, index: true
现在您可以在 Rails 中使用 foreign_key
而不是 index
5. 我不太明白为什么他们决定这样做,因为功能保持不变,什么您要添加的是索引,而不是该列的外键。
foreign_key
and index
是完全不同的东西(从名字就可以判断)。
所以什么都没有改变,你仍然可以使用两个。
您可以查看 these docs 以了解有关在迁移中建立关联的更多信息。
In Rails 5 - 当我们引用模型时,foreign_key
上的索引会自动创建。
迁移 API 已在 Rails 5 -
中更改
Rails 5 已更改迁移 API 因为即使 null: false
选项未传递给时间戳,当迁移 运行 时也会自动添加 not 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
而 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
index
和 foreign_key
是不同的概念,即使在 Rails 5 中也是如此。所以说 rails 5 将“index”更改为“foreign”是错误的键”。
从Rails 4 到 Rails 5 的变化是index
选项默认为true
,因此您无需显式设置。
rails 4.2.5
中的方法 add_reference
:index
Add an appropriate index. Defaults to false.
rails5.2
中的方法add_reference
:index
Add an appropriate index. Defaults to true. See add_index for usage of this option.
这就是为什么当您在 rails 5 迁移中生成 references
时,您没有看到 index: true
,因为它是默认值。
如果你在 Rails 4:
t.references :event, index: true
现在您可以在 Rails 中使用 foreign_key
而不是 index
5. 我不太明白为什么他们决定这样做,因为功能保持不变,什么您要添加的是索引,而不是该列的外键。
foreign_key
and index
是完全不同的东西(从名字就可以判断)。
所以什么都没有改变,你仍然可以使用两个。
您可以查看 these docs 以了解有关在迁移中建立关联的更多信息。
In Rails 5 - 当我们引用模型时,foreign_key
上的索引会自动创建。
迁移 API 已在 Rails 5 -
中更改Rails 5 已更改迁移 API 因为即使 null: false
选项未传递给时间戳,当迁移 运行 时也会自动添加 not 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
而 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
index
和 foreign_key
是不同的概念,即使在 Rails 5 中也是如此。所以说 rails 5 将“index”更改为“foreign”是错误的键”。
从Rails 4 到 Rails 5 的变化是index
选项默认为true
,因此您无需显式设置。
rails 4.2.5
中的方法 add_reference:index
Add an appropriate index. Defaults to false.
rails5.2
中的方法add_reference:index
Add an appropriate index. Defaults to true. See add_index for usage of this option.
这就是为什么当您在 rails 5 迁移中生成 references
时,您没有看到 index: true
,因为它是默认值。