Есть ли способ изменить столбец на внешний ключ? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть существующий столбец project_id внутри таблицы, которая называется содержимым. Предполагается, что это Foreign_key, который ссылается на проект в таблице проектов. Однако тот, кто настроил базу данных, создал таблицу содержимого без указания значения project_id как foreign_key.

Я пытался создать миграцию как:

def change
    add_reference :contents, :project
end

Но он пытается добавить столбец project_id, который уже существует.

Мой вопрос, есть ли способ (с помощью миграции) изменить столбец project_id на foreign_key?

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Rails 5+ позволяет добавлять ограничения foreign_key , используя миграцию

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

Кроме того, вам не нужны ограничения внешнего ключа для ActiveRecord для правильного сопоставления отношений при миграции, т.е. ограничение foreign_key может быть задано явно на уровне модели. Чтобы ускорить поиск , добавьте indexing на project_id, используя миграцию

ПРИМЕР-

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
1 голос
/ 05 июня 2019

вы можете попробовать с

add_foreign_key :contents, :projects, column: :project_id

для более подробной информации вы можете обратиться здесь

...