2012-02-02 13 views
41

estoy usando Rails 3.2 y tienen una migración que contiene el código:Model.reset_column_information no recargar columnas en los carriles de migración

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

y me sale unknown attribute: gift_aid cuando se ejecuta la migración. User.column_names muestra la misma lista antes y después de la llamada al reset_column_information.

Curiosamente, cuando dejo caer la columna manualmente en mysql y vuelvo a ejecutar la migración, funciona como se esperaba. Comenzar desde la primera migración nuevamente con una base de datos vacía y no funciona, por lo que tiene que ver con ejecutar todas las migraciones en lugar de la única.

Tengo un par de migraciones anteriores en el modelo de usuario, ambas incluyen reset_column_information y ambas funcionan bien.

realmente estoy rascándome la cabeza de éste - ¿Alguien tiene alguna idea

Respuesta

73

Creo que esto debe haber algún tipo de error relacionado con el almacenamiento en caché de esquema ... esto podría funcionar:

User.connection.schema_cache.clear! 
User.reset_column_information 

(para Rails 3.2.2)

+1

Creo que puede estar en lo cierto. De hecho, recibí dos llamadas a 'User.reset_column_information' en dos migraciones diferentes y fue la segunda que falló. Lo arreglé reorganizando mis migraciones, así que solo tuve una llamada a 'reset_column_information' (porque todavía tengo que implementar el sitio por lo que no hay problema para volver atrás). Esta solución parece que también podría funcionar. Lo probaré si tengo la oportunidad. – Iain

+1

Puedo confirmar que esto hace bien el trabajo. Parece que con migraciones largas y múltiples cambios en un modelo solo funciona el primer trabajo 'reset_column_information'. ¡Borrar el caché de esquema hace que funcione bien! Gracias :) – Iain

+1

¡Muchas gracias! Esto me estaba sacando de quicio ya que los documentos de Rails claramente escriben algo diferente -> http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations – hrdwdmrbl

Cuestiones relacionadas