Rails: Kann nicht hinzugefügt werden: Präzision oder: Skalierungsoptionen mit change_column in einer Migration?

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

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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top