Как пропустить несуществующие родительские записи и добавить ограничение внешнего ключа в миграциях Rails - PullRequest
0 голосов
/ 26 февраля 2019

Я работаю над приложением Rails, где мне нужно добавить некоторые внешние ключи для существующих столбцов из миграций Rails.

class AddFkRefsToPackages < ActiveRecord::Migration[5.2]
  def change
    add_foreign_key :packages, :orders, name: :index_packages_on_order_id
    add_foreign_key :packages, :locations, name: :index_packages_on_location_id
  end
end

При выполнении вышеуказанной миграции я получаю следующую ошибку:

StandardError: Произошла ошибка, все последующие миграции отменены:

Mysql2:: Ошибка: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (myproject_development. #sql-1_5a, CONSTRAINT index_packages_on_location_id FOREIGN KEY (quote_route_id) ССЫЛКИ quote_routes (id)): ALTER TABLEquote_legs ADD CONSTRAINT index_quote_legs_on_quote_route_id ИНОСТРАННЫЙ КЛЮЧ (location_id) ССЫЛКИ locations (id)

Через консоль Rails мы заметили, что в родительском (местоположениях) нет идентификаторов, ноупоминается в child (packages) как parent_id (location_id).

Мы пробовали это:

execute <<-SQL

      SET FOREIGN_KEY_CHECKS=0;

Помимо вышесказанного, можем ли мы добавить CASCADE_DELETE или есть способ очистки / пропускаэти записи?

...