rescue true

5 mayo, 2010

Utilizar una columna en la misma migración en la que se crea

Archivado en: Ruby on Rails,Tips&Tricks — xurdekio @ 8:59 pm
Tags: , ,

En muchas ocasiones nos encontramos con este problema: Creamos una migración para añadir una columna a nuesto modelo y queremos inicializarla con valores que dependen de otros. Al iniciar el enviroment de la migración se precargan en memoria los datos de las clases (también sus columnas), y la función add_column no hace que se vuelvan a interpretar dichas clases.

Por ello tenemos que recurrir la función Model.reset_column_information que nos proporciona ActiveRecord::Base.

Un ejemplo de uso sería:

class AddPrecioOfertaProductos < ActiveRecord::Migration
  def self.up
   add_column :productos, :precio_oferta, :decimal
   Producto.reset_column_information #Recargamos la información de las columnas
   Producto.all.each do |producto|
     maravilloso_codigo_que_inicializa_el_precio_en_oferta
   end
  end
  def self.down
    remove_column :productos, :precio_oferta
  end
end

La primera vez que necesite esto me volví loco para encontrarlo y creo que termine por hacer dos migraciones, así qué para que eso no os ocurra…

Tema Rubric. Blog de WordPress.com.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.