Rails: Kann nicht hinzugefügt werden: Präzision oder: Skalierungsoptionen mit change_column in einer Migration?
-
20-09-2019 - |
Frage
Das scheint gefragt wurden vor: Dezimalgenauigkeit und Maßstab Schienen
Aber beim Laufen einer change_column
Migration für :precision
oder :scale
sie eigentlich nicht das Schema oder Datenbank beeinflussen, aber db:migrate
läuft ohne Fehler.
Meine Migrationsdatei sieht wie folgt aus:
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
Aber mein Schema (und die Daten) bleiben als:
t.decimal "payback_period"
Jedes hat sonst dieses Problem?
Danke,
Josh
Lösung 2
funktioniert nicht für SQLite3
Für diesen einfachen Test-app, dass ich renne ich SQLite3 Setup haben. Offenbar SQLite3 nicht auf Spaltentyp Erklärungen angewiesen und dynamischer ist, in der Spalte Inhalt statt suchen - wie bei der hier gestolpert war:
ändern, um eine Typ-Säule in sqlite3
Ich habe es nicht getestet, aber ich bin sicher, das ist, warum das Schema nicht geändert wurde, weil change_column
zu irgendetwas nicht übersetzen in SQLite3.
Danke für die Antworten Jungs.
Andere Tipps
Sie hat ein ähnliches (aber gleiche nicht) Problem. Ich war gerade Skala zu ändern, so dass, wenn die Änderung der: Skala Sie die volle Linie müssen:
change_column :something, :weight, :decimal, :precision => 10, :scale => 2
Weglassen: dezimal (das war es schon) und:. Präzision (die bereits 10 war) bewirkt, dass die Migration fehlschlagen
Löschen und Regenerat db\schema.rb
Datei.
rake db:schema:dump
Ein Hack, aber es sollten Sie, wo Sie gehen müssen:
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