有没有办法将列更改为外键?

Is there a way to change column to foreign key?

我在名为 contents 的 table 中有一个现有的列 project_id。它应该是引用项目 table 中的项目的 foreign_key。但是,设置数据库的人创建了内容 table 而没有将 project_id 设置为 foreign_key.

我尝试将迁移创建为:

def change
    add_reference :contents, :project
end

但这会尝试添加一个已存在的列 project_id

我的问题是,有没有办法(使用迁移)将列 project_id 更改为 foreign_key?

你可以试试

add_foreign_key :contents, :projects, column: :project_id

详情请参考here

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