这是我的代码
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 中是不正确的。它引用了一些表格。为什么会这样。
答案 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
。