我在称为目录的表中有一个现有的列project_id
。应该是在项目表中引用项目的外键。但是,无论谁建立数据库,都将创建内容表,而没有将project_id设置为foreign_key。
我尝试将迁移创建为:
def change
add_reference :contents, :project
end
但这会尝试添加已经存在的列project_id
。
我的问题是,有没有办法(使用迁移)将列project_id
更改为foreign_key?
答案 0 :(得分:1)
答案 1 :(得分:1)
Rails 5+允许您添加foreign_key
constraints using migration
add_foreign_key :contents, :projects, column: :project_id, #primary_key: "id"
除此之外,您不需要ActiveRecord的外键约束来正确映射迁移中的关系,即foreign_key
约束也可以在模型级别显式设置。为了通过迁移更快地在project_id
上add indexing
检索
示例-
class Content < ApplicationRecord
belongs_to :project, class_name: 'Project', :foreign_key => "project_id"
end
class Project < ApplicationRecord
has_many :contents, class_name: 'Content', :foreign_key => "project_id", :dependent => :destroy
end