ruby-on-rails - remove - run migrate rails
Rieles: ¿No puede agregar: precisión o: opciones de escala con change_column en una migración? (4)
No funciona para SQLite3
Para esta aplicación de prueba simple que estoy ejecutando tengo la configuración de SQLite3. Al parecer, SQLite3 no se basa en declaraciones de tipo de columna y es más dinámico, al mirar el contenido de la columna, como se vio aquí:
Modificar el tipo de una columna en sqlite3
No lo he probado, pero estoy seguro de que por eso no se cambió el esquema, porque change_column
no se traduce en nada en SQLite3.
Gracias por las respuestas, chicos.
Esto parece haber sido preguntado antes: la precisión y la escala decimales de los rieles
Pero cuando se ejecuta una migración de change_column
para :precision
o :scale
, en realidad no afectan al esquema o la base de datos, pero db:migrate
ejecuta sin errores.
Mi archivo de migración se ve así:
class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
def self.up
change_column :tags, :payback_period, :decimal, { :scale => 3, :precision => 10 }
end
def self.down
change_column :tags, :payback_period, :decimal
end
end
Pero mi esquema (y los datos) permanece como:
t.decimal "payback_period"
¿Alguien más tiene este problema?
Gracias,
Josh
Eliminar y regenerar el archivo db/schema.rb
.
rake db:schema:dump
Tenía un problema relacionado (pero no el mismo). Estaba cambiando la escala, así que al cambiar la escala: necesitas la línea completa:
change_column :something, :weight, :decimal, :precision => 10, :scale => 2
omitiendo: decimal (que ya estaba) y: precisión (que ya era 10) causará que la migración falle.
Un truco, pero debería llevarte a donde necesitas ir:
class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
def self.up
execute "ALTER TABLE tags CHANGE payback_period DECIMAL(3,10)"
end
def self.down
change_column :tags, :payback_period, :decimal
end
end