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