Rails: Impossibile aggiungere: le opzioni di scala con change_column in una migrazione: di precisione o?

StackOverflow https://stackoverflow.com/questions/2450494

Domanda

Questa sembra essere stata fatta prima: rotaie precisione decimale e la scala

Ma quando si esegue una migrazione change_column per :precision o :scale in realtà non influenzano lo schema o database, ma db:migrate eseguito senza errori.

Il mio file di migrazione è simile al seguente:

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

Ma il mio schema (ei dati) rimane come:

t.decimal  "payback_period"

Chiunque altro ha questo problema?

Grazie,

Josh

È stato utile?

Soluzione 2

non funziona per SQLite3

Per questa semplice applicazione di test che sto correndo ho installato SQLite3. A quanto pare, SQLite3 non si basa su dichiarazioni di tipo colonna ed è più dinamica, guardando il contenuto della colonna, invece - come è stato inciampato su qui:

Modificare i tipi di una colonna in sqlite3

Non ho ancora testato, ma sono sicuro che è il motivo per lo schema non veniva cambiato, perché change_column non si traduce in nulla in SQLite3.

Grazie per le risposte ragazzi.

Altri suggerimenti

Aveva un correlato (ma non uguale) problema. Stavo cambiando scala, in modo da quando si cambia il: scala è necessario il linea completa:

change_column :something, :weight, :decimal, :precision => 10, :scale => 2

omettendo: decimale (che già era) e:. Precisione (che già era 10) provoca la migrazione di sicuro

Elimina e rigenerare il file db\schema.rb.

rake db:schema:dump

Un hack, ma dovrebbe arrivare dove devi andare:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top