Я использую Rails 3.2 и есть миграции, которая содержит код:Model.reset_column_information не перезагружать столбцов в рельсах миграции
add_column :users, :gift_aid, :integer, :default => 2
# reset columns
User.reset_column_information
... code here to load legacy data from sqlite3 database ...
# now create a user with the loaded column data
user = User.create(...other cols...,
:gift_aid => migrated_gift_aid_column_data,
...other cols...)
и я получаю unknown attribute: gift_aid
при выполнении миграции. User.column_names
показывает тот же список до и после вызова reset_column_information
.
Как ни странно, когда я вручную удаляю столбец в mysql и перезапускаю его, он работает так, как ожидалось. Начиная с первой миграции снова с пустой базой данных, и она не работает, поэтому это связано с запуском всех миграций, а не с одним.
У меня есть пара предыдущих миграций на модели пользователя, включая reset_column_information
, и оба работают нормально.
Я действительно чесать голову на этом - кто-получил какие-либо идеи
Я думаю, вы можете быть правы. На самом деле у меня было два вызова 'User.reset_column_information' в двух разных миграциях, и это было второе, которое не срабатывало. Я исправил его, реорганизовывая свои миграции, поэтому у меня был только один вызов 'reset_column_information' (потому что я еще не окончательно разворачиваю сайт, так что это не проблема). Это решение похоже, что оно может работать. Я проверю это, если у меня появится шанс. – Iain
Я могу подтвердить, что это хорошо работает. Похоже, что с длинными миграциями и несколькими изменениями в модели работает только первая команда 'reset_column_information'. Очистка кеша схемы делает работу просто прекрасной! Спасибо :) – Iain
Огромное вам спасибо! Это приводило меня в бешенство, так как в документах Rails явно написано что-то другое -> http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations – hrdwdmrbl