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 .