Rails: Impossibile aggiungere: le opzioni di scala con change_column in una migrazione: di precisione o?
-
20-09-2019 - |
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
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