Saludos a todos.
Soy un novato en Rails, y me ha surgido una duda que tiene que ver con
las migraciones y con PostgreSQL.
Estoy usando la versión svn de rails, para lo cual hago:
~ $ rails depot
~ $ cd depot
~/depot $ rake rails:freeze:edge
La aplicación usará una base de datos PostgreSQL, para lo cual configuro
adecuadamente mi aplicación editando el archivo config/database.yml.
Ahora creo un modelo para una tabla de artÃculos:
~/depot $ ruby script/generate model articulo
Me crea el archivo db/migrate/001_create_articulos.rb, que modifico
hasta tener el siguiente contenido:
class CreateArticulos < ActiveRecord::Migration
def self.up
create_table :articulos do |t|
t.column :denominacion, :string
t.column :precio, :decimal, :precision => 5, :scale => 2
end
end
def self.down
drop_table :articulos
end
end
Finalmente, hago:
~/depot $ rake db:migrate
lo cual me crea la tabla articulos correctamente:
depot_development=# \d articulos
Tabla «public.articulos»
Columna | Tipo |
Modificadores
--------------±-----------------------±-------------------------------------------------------
id | integer | not null default
nextval(‘articulos_id_seq’::regclass)
denominacion | character varying(255) |
precio | numeric(5,2) |
Ãndices:
«articulos_pkey» PRIMARY KEY, btree (id)
Ahora viene el problema:
Pretendo añadir una nueva columna, para lo cual creo una migración:
~/depot $ ruby script/generate migration add_coste
Modifico el archivo db/migrate/002_add_coste.rb, que modifico para que
tenga esta pinta:
class AddCoste < ActiveRecord::Migration
def self.up
add_column :articulos, :coste, :decimal, :precision => 6, :scale =>
2
end
def self.down
remove_column :articulos, :coste
end
end
Luego hago:
~/depot $ rake db:migrate
que me añade la nueva columna, PERO SIN PRECISIÓN NI ESCALA:
depot_development=# \d articulos
Tabla «public.articulos»
Columna | Tipo |
Modificadores
--------------±-----------------------±-------------------------------------------------------
id | integer | not null default
nextval(‘articulos_id_seq’::regclass)
denominacion | character varying(255) |
precio | numeric(5,2) |
coste | numeric |
Ãndices:
«articulos_pkey» PRIMARY KEY, btree (id)
Observad la diferencia entre las columnas precio y coste. La primera
tiene precisión (5) y escala (2), pero la segunda no. El caso es que en
la orden add_column especifico claramente que quiero precisión 6 y
escala 2.
Parece un fallo de add_column. ¿Qué os parece?