Rails Active Records:foreign_key vs references

时间:2017-09-07 08:51:40

标签: ruby-on-rails activerecord foreign-keys

这是我的代码

class CreatePosts < ActiveRecord::Migration[5.1]
  def change
    create_table :posts, id: :uuid do |t|
      t.string :name

      t.references :user, type: :uuid
      t.references :user, type: :uuid, foreign_key: true    

      t.timestamps
    end
  end
end

我很困惑b / w这些行的区别是什么。两行代码都能很好地完成表之间的引用。

t.references :user, type: :uuid
t.references :user, type: :uuid, foreign_key: true   #what this line is doing 

有人可以解释我何时使用 foreign_key

我在搜索这些

时发现了类似的东西
t.references :makers, foreign_key: { to_table: :office }

在上面的代码 foreign_key 中是不正确的。它引用了一些表格。为什么会这样。

2 个答案:

答案 0 :(得分:1)

foreign_key: true将创建一个外键约束,没有它,只会创建外键。

要了解外键和外键约束之间的区别,请访问this链接。

指定foreign_key: { to_table: :office }将使外键引用office表。

答案 1 :(得分:0)

您可以查看references here的文档,它使用与add_reference相同的选项。

所以,不同的是:

t.references :user, type: :uuid - 添加列而不添加约束。

t.references :user, type: :uuid, foreign_key: true - 添加列和外键约束。如果您没有指定foreign_key,那么它将是错误的。

foreign_key: { to_table: :table_name } - 可以选择使用自定义名称而不是约定名称添加列。

例如,在文档中:

add_reference(:products, :supplier, foreign_key: {to_table: :firms})

因此,它会向表supplier_id添加列名products并添加外键以引用firms表。

如果您遵循约定名称,则需要添加名为firm_id的列,而不是supplier_id