41

Я использую 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, и оба работают нормально.

Я действительно чесать голову на этом - кто-получил какие-либо идеи

ответ

73

Я думаю, что это должна быть какая-то ошибка, связанные с кэшированием схемы ... это может работать:

User.connection.schema_cache.clear! 
User.reset_column_information 

(для Rails 3.2.2)

+1

Я думаю, вы можете быть правы. На самом деле у меня было два вызова 'User.reset_column_information' в двух разных миграциях, и это было второе, которое не срабатывало. Я исправил его, реорганизовывая свои миграции, поэтому у меня был только один вызов 'reset_column_information' (потому что я еще не окончательно разворачиваю сайт, так что это не проблема). Это решение похоже, что оно может работать. Я проверю это, если у меня появится шанс. – Iain

+1

Я могу подтвердить, что это хорошо работает. Похоже, что с длинными миграциями и несколькими изменениями в модели работает только первая команда 'reset_column_information'. Очистка кеша схемы делает работу просто прекрасной! Спасибо :) – Iain

+1

Огромное вам спасибо! Это приводило меня в бешенство, так как в документах Rails явно написано что-то другое -> http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations – hrdwdmrbl

Смежные вопросы