ruby-on-rails 为什么Rails 5把“index”改成了“foreign key”?

z8dt9xmd  于 2023-10-21  发布在  Ruby
关注(0)|答案(3)|浏览(116)

如果你在Rails 4中有这个:

t.references :event, index: true

现在,您可以在Rails 5中使用foreign_key而不是index。我不太明白为什么他们决定这样做,因为功能保持不变,你添加的是一个索引,而不是一个外键到该列。

hgtggwj0

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将生成

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
gab6jxml

gab6jxml2#

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

m4pnthwp

m4pnthwp3#

foreign_keyindex是完全不同的东西(从它们的名字可以判断)。
所以什么都没有改变,你仍然可以使用两个。
您可以查看these docs以了解有关在迁移中建立关联的更多信息。

相关问题