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

时间:2019-06-05 05:08:07

标签: ruby-on-rails rails-migrations

我在称为目录的表中有一个现有的列project_id。应该是在项目表中引用项目的外键。但是,无论谁建立数据库,都将创建内容表,而没有将project_id设置为foreign_key。

我尝试将迁移创建为:

def change
    add_reference :contents, :project
end

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

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

2 个答案:

答案 0 :(得分:1)

您可以尝试

add_foreign_key :contents, :projects, column: :project_id

有关更多详细信息,请参见here

答案 1 :(得分:1)

Rails 5+允许您添加foreign_key constraints using migration

add_foreign_key :contents, :projects, column: :project_id, #primary_key: "id"

除此之外,您不需要ActiveRecord的外键约束来正确映射迁移中的关系,即foreign_key约束也可以在模型级别显式设置。为了通过迁移更快地在project_idadd 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