rescue true

5 mayo, 2010

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

Filed under: 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…

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: