ruby-on-rails - proyecto - regresar migracion rails
Rails no me deja cambiar los registros durante la migraciĆ³n (3)
¡Esto debe ser algo simple pero me está volviendo loco!
Tengo una migración donde quiero actualizar un registro después
class SubjectsTextField < ActiveRecord::Migration
def self.up
add_column :users, :subjects, :text
User.find(39).update_attribute :subjects, "hey there"
end
def self.down
remove_column :users, :subjects
end
end
La columna se crea, pero cuando voy a verificar el registro 39, el campo de los sujetos es nulo y no dice "hey there". No se generan errores durante la migración y la línea update_attribute devuelve true como si hubiera funcionado.
Esta línea funciona perfectamente en la consola y tiene el efecto esperado:
User.find(39).update_attribute :subjects, "hey there"
Intenté colocar la línea update_attribute en una segunda migración. Si soplo a través de ambos en un "rake db: migrate" hasta el final, aún no funciona.
Pero aquí está la parte rara. Si ejecuto dos migraciones separadas, diga "rake db: migrate VERSION = 10" para crear solo la columna y luego la segunda con "rake db: migrate" para actualizar el atributo ¡FUNCIONA!
¿Qué diablos está pasando ... cómo modifico un registro durante una migración? Me parece recordar haber hecho esto muy a menudo en el pasado. Tal vez sea algo diferente con Rails 2.3.2?
¡Gracias! Brian
Esta sintaxis es muy clara ... prueba con change_table
class AddReceiveNewsletterToUsers < ActiveRecord::Migration
def self.up
change_table :users do |t|
add_column :users, :subjects, :text
end
User.find(39).update_attribute "subjects", "hey there"
end
def self.down
remove_column :users, :receive_newsletter
end
end
Si combina los dos en su migración inicial de esta manera, ¿funciona?
class SubjectsTextField < ActiveRecord::Migration
def self.up
add_column :users, :subjects, :text
User.find(39).update_attribute "subjects", "hey there"
end
def self.down
remove_column :users, :subjects
end
end
reset_column_information
llamar a reset_column_information
en el modelo que cambió antes de poder usar la nueva columna. Agregue esto entre el add_column
y la actualización:
User.reset_column_information
Consulte "Uso de un modelo después de cambiar su tabla" en la página ActiveRecord::Migration .