update run remove rails migrations ruby-on-rails migration decimal precision scale

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