Я добавил две миграции, которые в первом добавлении столбца к модели, а во втором я выполняю функцию, которая хранит значение в столбце, недавно добавленном в некоторые строки ,Изменение столбца миграции, не загруженного в рельсы миграции
Проблема заключается в том, что при запуске rake db: migrate вторая миграция вызывает ошибку, поскольку первая миграция была загружена, но база данных еще не изменилась, поэтому один из подходов состоит в том, чтобы запустить команду дважды (она работает).
Первая миграция:
class AddRegisteredReportToSpecialOfferUse < ActiveRecord::Migration
def up
add_column :special_offer_uses, :registered_report, :boolean, default: false
end
def down
remove_column :special_offer_uses, :registered_report
end
end
Вторая миграция:
class CreateReportsFromMigrations < ActiveRecord::Migration
def change
OneClass.perform
end
end
OneClass.perform это метод, который делает обновление атрибута ранее
добавилdef perform
´´´
special_offer_uses.update_attribute(:registered_report, true)
´´´
end
ошибка брошена :
StandardError: An error has occurred, all later migrations canceled: undefined method `registered_report=
Обратите внимание, что метод undefined - это имя атрибута, добавленного ранее.
Интересно, есть ли способ избежать выполнения команды дважды без какой-либо ошибки.
ОБНОВЛЕНИЕ:
Я нашел решение с использованием reset_column_information метод, который вызывает столбцы, которые будут перезагружается при следующем запросе.
Resets all the cached information about columns, which will cause them to be reloaded on the next request.
The most common usage pattern for this method is probably in a migration, when just after creating a table you want to populate it with some default values
Дополнительная информация: link
Вы можете показать сообщение об ошибке? –
У меня никогда не было этой проблемы. я даже делаю это в той же миграции – Fallenhero
Не могли бы вы поместить 2 миграции и сообщение об ошибке – MZaragoza