regresar rails proyecto migraciones migracion llaves libro hacer foraneas crear como comando asociaciones ruby-on-rails migration

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 .