web-dev-qa-db-fra.com

Model.reset_column_information ne recharge pas les colonnes dans la migration Rails

J'utilise Rails 3.2 et j'ai une migration qui contient le code:

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... )

et je reçois unknown attribute: gift_aid lors de l'exécution de la migration. User.column_names affiche la même liste avant et après l'appel à reset_column_information.

Curieusement, lorsque je dépose manuellement la colonne dans mysql et réexécute la migration, cela fonctionne comme prévu. À partir de la première migration à nouveau avec une base de données vide et cela ne fonctionne pas, c'est donc quelque chose à voir avec l'exécution de toutes les migrations plutôt que la seule.

J'ai effectué quelques migrations précédentes sur le modèle utilisateur, les deux incluent reset_column_information et les deux fonctionnent bien.

Je me gratte vraiment la tête sur celui-ci - tout le monde a des idées

48
Iain

Je pense que cela doit être une sorte de bogue lié à la mise en cache du schéma ... cela pourrait fonctionner:

User.connection.schema_cache.clear!
User.reset_column_information

(pour Rails 3.2.2)

83
Seamus Abshere

cela n'est pas nécessaire sur Rails 6 (testé sur 6.0.0beta3).

J'ai essayé les deux avec update!(new_column: ...) et update_all(new_column: ...)

0
localhostdotdev