Это действительно прискорбно, но это распространенная проблема, которая почти никогда не решается.
Когда записывается перенос данных в модель, либо для изменения или задания значений, либо для добавления данных, обычно полагается намодель приложения (со всеми соответствующими обратными вызовами и т. д.).
Но затем добавляется больше обратных вызовов, и предыдущие миграции нарушаются.Хуже того, более поздняя миграция может переименовать или удалить столбец, а вставленные данные больше недействительны.
Решение состоит в том, что вы НИКОГДА не должны использовать модели приложений в миграции, а скорее какую-то локальную модель, которая использует всенаходится в базе данных в то время:
class PopulateStock < ActiveRecord::Migration
class Stock < ActiveRecord::Model
self.table_name = 'stocks'
end
def up
Stock.create(...)
end
end
Теперь модель Stock
, на которую ссылается миграция, полностью определяется состоянием таблицы во время миграции (без дополнительных столбцов, без обратных вызовови т. д.) вместо того, чтобы зависеть от всех модели приложения.
К сожалению, это означает, что вам придется проходить через все миграции вашего приложения и создавать для них локальные модели, пока миграции не будут запущены.