Esto debe ser algo simple pero me está volviendo loco!
tengo una migración donde quiero actualizar un registro despuésRails no me permitirá cambiar los registros durante la migración
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 comprobar ficha 39, es campo de los sujetos es nula y no dice "Hola". No se generan errores durante la migración y la línea update_attribute devuelve verdadero 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"
He intentado poner la línea update_attribute en una segunda migración. Si soplo a través de ambos en un "rake db: migrate" hasta llegar a la actual, todavía no funciona.
Pero aquí está la parte extraña. Si ejecuto dos migraciones por separado, diga "rake db: migrate VERSION = 10" para crear solo la columna y luego la segunda con "rake db: migrate" para actualizar el atributo IT WORKS.
¿Qué diablos está pasando ... cómo modificar un registro durante una migración? Me parece recordar haber hecho esto con bastante frecuencia en el pasado. Tal vez es algo diferente con Rails 2.3.2?
Gracias! Brian
eso fue gracias Michael! No puedo creer que nunca me haya encontrado con esto antes ... gracias un millón. –
Tuve un problema similar. Alguien no usó t.timestamps en una migración que creó un modelo, pero lo hicieron t.datetime: updated_at. Así que quería agregar: created_at e inicializar cualquier objeto existente 'created_at al valor actual de updated_at, pero siempre era nil. Lo extraño fue que funcionó bien cuando traté de usar Time.now. De todos modos, gracias Michael. ¡Tu publicación ayudó mucho! Eso lo solucionó para mí. – bratsche
Gracias a Michael por el enlace a la página de la API: ayuda a mantenerme actualizado porque en otras páginas he descubierto que el método #reset_column_information está en desuso. – Attilio