Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么Rails 5发生了变化;索引“;至;外键“;?_Ruby On Rails_Foreign Keys_Primary Key_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 为什么Rails 5发生了变化;索引“;至;外键“;?

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

如果在Rails 4中有此功能:

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。