Ошибка миграции Rails: ссылка на столбец и столбец, на который есть ссылка в ограничении внешнего ключа, несовместимы - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть две модели:

Factory
 belongs_to :owner, optional: true

и

Owner
 has_many :factories

Новая ситуация: я хотел бы добавить новую ассоциацию original_ower где

Factory
 belongs_to :original_owner,class_name: 'Owner', foreign_key: 'original_owner_id', optional: true
 belongs_to :owner, optional: true

гдея бы скопировал значение из владельца в original_owner за один раз. с этого момента владелец должен быть изменен через интерфейс. Я создал задачу миграции:

class AddOriginalOwner < ActiveRecord::Migration[5.2]
 def change
  add_reference(:factories, :original_owner, foreign_key: {to_table: :owners})
  reversible do |direction|
   direction.up do
    Factory.all.each { |c| c.update(original_owner: c.owner) }
   end
  end
 end
end

, однако, когда я запускаю rails db:migrate, он возвращает ошибку в соответствии с:

Mysql2::Error: Referencing column 'original_owner_id' and referenced column 'id' in foreign key constraint 'fk_rails_b587c8547c' are incompatible.: ALTER TABLE `factories` ADD CONSTRAINT `fk_rails_b587c8547c`
FOREIGN KEY (`original_owner_id`)
  REFERENCES `owners` (`id`)

Кто-нибудь случайно понял, чтопродолжается? или где исследовать? Danke schon,

ОБНОВЛЕНИЕ: я добавляю type: :integer к задаче миграции, и она выполняется, но кажется очень длинной

add_reference(:companies, :original_employee, foreign_key: {to_table: :employees}, type: Integer)

1 Ответ

0 голосов
/ 05 ноября 2019

Я добавил type: :integer в задачу миграции

add_reference(:factories, :original_owner, foreign_key: {to_table: :owners}, type: :integer)

...