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 .