Ruby on rails 为什么Rails 5发生了变化;索引“;至;外键“;?
如果在Rails 4中有此功能:Ruby on rails 为什么Rails 5发生了变化;索引“;至;外键“;?,ruby-on-rails,foreign-keys,primary-key,ruby-on-rails-5,Ruby On Rails,Foreign Keys,Primary Key,Ruby On Rails 5,如果在Rails 4中有此功能: t.references :event, index: true 现在您可以在Rails 5中使用外键而不是索引。我不太明白他们为什么决定这样做,因为功能保持不变,所以您要添加的是索引,而不是该列的外键。并且是完全不同的东西(您可以从他们的名称判断) 所以没有任何改变,你仍然可以使用两个 您可以查看有关在迁移中建立关联的更多信息。在Rails 5中-当我们引用模型时,会自动创建外键上的索引 Rails 5中的迁移API已更改- Rails 5已经更改了迁移AP
t.references :event, index: true
现在您可以在Rails 5中使用外键
而不是索引
。我不太明白他们为什么决定这样做,因为功能保持不变,所以您要添加的是索引,而不是该列的外键。并且是完全不同的东西(您可以从他们的名称判断)
所以没有任何改变,你仍然可以使用两个
您可以查看有关在迁移中建立关联的更多信息。在Rails 5中-当我们引用模型时,会自动创建
外键上的索引
Rails 5中的迁移API已更改-
Rails 5已经更改了迁移API,因此即使在运行迁移时,null:false
选项没有传递给时间戳,也会自动为时间戳添加NOTNULL
类似地,我们几乎在所有情况下都需要引用列的索引。因此,Rails 5不需要引用就具有索引:true
。运行迁移时,会自动创建索引
例如-(从复制)
运行rails g model任务时用户: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
class CreateTasks < ActiveRecord::Migration[5.0]
def change
create_table :tasks do |t|
t.references :user, foreign_key: true
t.timestamps
end
end
end
class CreateTasks
rails 5将生成
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
class CreateTasks < ActiveRecord::Migration[5.0]
def change
create_table :tasks do |t|
t.references :user, foreign_key: true
t.timestamps
end
end
end
class CreateTasks
索引和外键是不同的概念,即使在Rails 5中也是如此。所以说rails 5将“索引”改为“外键”是错误的
从Rails 4到Rails 5的变化是索引
选项默认为真
,因此不需要显式设置
rails 4.2.5中的方法
:索引
添加适当的索引。默认为false
rails 5.2中的方法
:索引
添加适当的索引。默认为true。有关此选项的用法,请参见添加索引
这就是为什么在rails 5迁移中生成引用时,您没有看到索引:true
,因为这是默认值。我真的不理解您的问题,索引选项添加了数据库索引,外键选项添加了数据库外键。非常详细的答案。但是,如果出于任何原因,我不希望引用被索引呢?或者,即使我只有t,它仍然在Rails 4中隐式索引。引用:user,foreign\u key:true
?——现在,我想知道为什么他们甚至没有省略外键:true。