Model.reset_column_information не перезагружает столбцы при миграции рельсов - PullRequest
46 голосов
/ 02 февраля 2012

Я использую Rails 3.2 и имею миграцию, которая содержит код:

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 и перезапускаю миграцию, он работает, как и ожидалось.Начиная с первой миграции снова с пустой базой данных, и она не работает, так что это связано с выполнением всех миграций, а не с одной.

У меня есть пара предыдущих миграций на модели User, обевключите reset_column_information и оба работают нормально.

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

Ответы [ 2 ]

83 голосов
/ 16 марта 2012

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

User.connection.schema_cache.clear!
User.reset_column_information

(для Rails 3.2.2)

0 голосов
/ 23 апреля 2019

это не требуется на рельсах 6 (протестировано на 6.0.0beta3).

Я пробовал оба с update!(new_column: ...) и update_all(new_column: ...)

...