Carriles: No se puede agregar: opciones de escala con change_column en una migración: precisión o?
-
20-09-2019 - |
Pregunta
Esto parece haber sido preguntado antes: carriles precisión decimal y la escala
Sin embargo, cuando se ejecuta una migración change_column
para :precision
o :scale
que en realidad no afectan el esquema o base de datos, pero db:migrate
se 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) se mantiene como:
t.decimal "payback_period"
¿Alguien más tiene este problema?
Gracias,
Josh
Solución 2
no funciona para SQLite3
Para esta aplicación simple prueba de que estoy corriendo He fijado SQLite3. Al parecer, SQLite3 no se basa en declaraciones de tipo columna y es más dinámico, mirando el contenido de la columna en lugar - como se ha tropezado aquí:
Modificar tipo de una columna en sqlite3
Yo no lo he probado, pero estoy seguro que por eso el esquema no se va a cambiar, porque change_column
no se traduce en nada en SQLite3.
Gracias por las respuestas chicos.
Otros consejos
Tuvimos un problema relacionado (pero no igual). Estaba cambiando de escala, por lo que cuando se cambia el: escala que necesito toda la línea:
change_column :something, :weight, :decimal, :precision => 10, :scale => 2
omitiendo: decimal (que ya era) y:. Precisión (que ya estaba 10) hará que la migración no se lleve
Eliminar y volver a generar el archivo db\schema.rb
.
rake db:schema:dump
Una corte, pero debe llegar a donde tiene que 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