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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top