2011-12-16 9 views
5

Estoy usando Rails 3.0.3 (no pregunto) y cuando ejecuto una migración para la tabla con columna decimal y establezco: default => 0 está restableciendo la escala y la precisión de la columna a (10,0).Columna decimal de migración de rieles: valor predeterminado => 0 restableciendo la precisión de MySQL a 0?

def self.up 
create_table :courses do |t| 
    t.integer :user_id 
    t.string :name 
    t.decimal :distance, :precision => 5, :scale => 2, :default => 0 
    t.text :notes 

    t.timestamps 
end 
end 

Cuando quito el: default => 0 opción de la migración de la columna de escala y la precisión son correctos: (5,2)

Intenté funcionar con una migración change_column única: default =>: 0 set, pero la escala y la precisión de la columna se re-establecen en (10,0)

change_column :courses, :distance, :decimal, :default => 0.0 

sé que puedo entrar en MySQL y corregir la precisión y la escala de la columna, pero se pregunta si estoy haciendo algo mal o si esto es un error?

Google no revela información, así que creo que estoy haciendo algo mal.

Respuesta

2

También estaba atrapado en este caso, y no puedo encontrar una solución para ello. Al final tuve que ir a MySQL y cambiar el valor de precisión, escala y valor predeterminado requerido, he usado esto desde here con algunas modificaciones

mysql> ALTER TABLE question ADD (price INTEGER); 
mysql> ALTER TABLE question DROP price; 
mysql> ALTER TABLE question ADD (frig DECIMAL(5,2)); 
mysql> ALTER TABLE question CHANGE frig price DECIMAL(5,2); 
mysql> ALTER TABLE question ALTER status SET DEFAULT '0'; 
mysql> ALTER TABLE question MODIFY price INTEGER; 

Proveedores: default => 0.0 #note el 0.0 como el valor por defecto debe estar en el tipo de datos especificado, es decir, decimal

Espero que ayude.

+0

Gracias por la respuesta. Lo que terminé haciendo fue eliminar las opciones: precision y: scale de la migración create_table y agregué una migración column_change para la columna con: precision => 5 y: scale => 2. Dejé fuera la opción: default. Volqué todo, volví a ejecutar las migraciones, y he aquí que MySQL había establecido automáticamente el valor predeterminado de la columna en 0.0 – jacoulter

+0

@jacoulter. No hay problema, definitivamente usaré el método que describí la próxima vez que enfrente este problema. Todavía no entiendo por qué tiene que hacerse de esta manera, de todos modos, siempre y cuando funcione por ahora. Gracias – Hishalv

6

Prueba con esto: t.decimal :distance, :precision => 5, :scale => 2, :default => 0.00

1

También se puede hacer

def change 
    change_column :courses , :distance, :decimal, :precision => 5, :scale => 2, :null => false, :default => '0' 
end 
0

Estoy tratando esto ahora mismo y parece que funciona.

Active Records Migrations

class ChangeVisitratioFormatInCampaigns < ActiveRecord::Migration[5.0] 
    def change 
    reversible do |dir| 
     change_table :campaigns do |t| 
      dir.up { t.change :visitratio, :decimal, :precision => 5, :scale => 4, :default => 1 } 
      dir.down { t.change :visitratio, :integer } 
     end 
    end 
    end 
end 
Cuestiones relacionadas