在Rails 5中,当我们引用模型时,foreign_key上的索引会自动创建。 Rails 5中的迁移API已更改- 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时, 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
3条答案
按热度按时间hgtggwj01#
在Rails 5中,当我们引用模型时,
foreign_key
上的索引会自动创建。Rails 5中的迁移API已更改-
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
时,Rails 4将生成
轨道5会产生
gab6jxml2#
index
和foreign_key
是不同的概念,即使在Rails 5中也是如此。所以说rails 5把“index”改成了“foreign key”是错误的。从Rails 4到Rails 5的变化是
index
选项默认为true
,因此您不需要显式地设置它。rails 4.2.5中的方法add_reference
:索引
添加适当的索引。默认为false。
rails 5.2中的方法add_reference
:索引
添加适当的索引。默认为true。有关此选项的用法,请参见add_index。
这就是为什么在rails 5迁移中生成
references
时,看不到index: true
,因为它是默认的。m4pnthwp3#
foreign_key
和index
是完全不同的东西(从它们的名字可以判断)。所以什么都没有改变,你仍然可以使用两个。
您可以查看these docs以了解有关在迁移中建立关联的更多信息。