Если вам больше не нужна миграция, вы можете просто удалить файл миграции.Если вы используете контроль версий, вы всегда можете удалить его в будущем.Но если вы можете пропустить это в работе, я не знаю, почему вам это когда-нибудь понадобится снова.
Если удаление не является вариантом, значит, оно вам нужно, и это нужно исправить.Миграции никогда не должны ссылаться на модели в каталоге app
по точной причине, которую вы описываете.Модели могут измениться так, что старые миграции потерпят неудачу
Если вы можете исправить миграцию для работы с использованием чистого SQL, это лучший вариант.
Если вам по какой-то причине нужно использовать модель AR, вы должны объявить минимальную модель при миграции только с тем, что вам нужно.Таким образом, ваша миграция изолирована от любых будущих изменений модели.Вот простой пример.В этом случае я бы просто использовал SQL, но для демонстрации:
class UpdateUserDisplayNames < ActiveRecord::Migration
# Any reference to User in the scope of this migration will
# reference this class, insulating the migration from changes
# to the User class in app/models
class User < ApplicationRecord; end;
def up
User.find_each do |u|
u.update!(display_name: "#{u.first_name} #{u.last_name}"
end
end
end