En el proyecto con el que ando liado en mis ratos libres, necesitaba añadir a varios modelos atributos que almaceneran decimales. En principio era tan simple como crear en cada migración las columnas con su tipo de dato correspondiente:
t.column :price, :precision => 6, :scale => 2, :default => nil
El caso es que se me hacía un tanto repetitivo estar añadiendo la misma línea en todas las migraciones donde me hacía falta(sé que no es para tanto, pero a veces la vagancia me puede) y además no estaba usando el estilo de los nuevos atajos que trae Rails 2.0, así que la solución era tan sencilla como reabrir la clase ActiveRecord::ConnectionAdapters::TableDefinition(bendito Ruby) y crear el método necesario:
class ActiveRecord::ConnectionAdapters::TableDefinition
def currency(*columns)
columns.each do |column|
self.column column, :decimal, :precision => 6, :scale => 2, :default => nil
end
end
end
Y ya podía usar en todas mis migraciones el método t.price teniendo que indicar únicamente el nombre de la columna(o columnas) que quería crear:
class CreateLineItems < ActiveRecord::Migration
def self.up
create_table :line_items do |t|
t.references :order
t.references :item, :polymorphic => true
t.currency :price
t.timestamps
end
end
def self.down
drop_table :line_items
end
end

Bajo el marco de las III Jornadas de Informática organizadas en la Universidad Europea de Madrid que se celebran los días 15 y 16 de noviembre, 
