我正在开发一个 Rails 应用程序,我需要为 Rails 迁移中的现有列添加一些外键,并且很少有人也在处理相同的列。 我以这种方式添加:
class AddUserRefToEvents < ActiveRecord::Migration[5.2]
def change
add_foreign_key :events, :users, name: :index_events_on_user_id
end
end
我的一个伙伴是这样添加的:
class AddUserToParts < ActiveRecord::Migration[5.0]
def up
add_reference :parts, :user
end
def down
remove_reference :parts, :user
end
end
当我们使用 SchemaCrawler 构建模式图时,关系在用户和事件之间是内置的(带有 add_foreign_key
),但用户和部分之间没有关系(当added add_reference
时)。
你能告诉我为什么吗?我们可以同时使用两者(参考此链接)还是仅使用add_foreign_key
?请帮忙。
事实是add_reference
默认情况下不添加外键。v5.2 或 v5.0 的 API 文档声明,选项哈希可以包含:foreign_key
键来设置适当的外键约束。
因此,要使用add_reference
只需更改代码以包含foreign_key: true
选项即可。
add_reference :parts, :user, foreign_key: true