Rails 3でデータを失うことなく小数点以下の桁に精度と位取りを追加するにはどうすればよいですか?

私は、SQLiteを使ってRails 3の既存の10進数の列に精度と位取りを追加したいと考えています。私は3つのアプローチを試しましたが、スキーマに永久に影響を与えることはできませんでした。

まず、元の移行とschema.rbに精度と位取りを追加しました。私のデータベースはSQLiteであり、列の型はそれほど重要ではないので、これは妥当と思われました。しかし、次にrake db:migrateを実行したときに、精度と位取りがschema.rbの列から削除されました。

次に、私はこのような新しい移行を実行しようとしました:

def up
  change_table :my_table do |t|
    t.change :my_column, :decimal, precision: 15, scale: 2
  end
end

ただし、この移行を実行しても、バージョンの変更以外はschema.rbには影響しませんでした。だから私は似たようなことを試みた:

def up
  change_column :my_table, :my_column, :decimal, precision: 15, scale: 2
end

バージョン番号を除いてschema.rbに変更はありません。

すべての移行を再実行せずに小数点以下の桁に精度と位取りを追加するにはどうすればよいですか?私はスキーマが必要とされていますが、データを失うことはありません。

1
SQLiteは小数点以下桁の精度と位取りをサポートしていますか?私はSQLiteがデフォルトのデータベースであることを知っていますが、 decimal(m、n)のような厳密なデータ型が必要な場合は実際には適していません。
追加された 著者 mu is too short,
Railsはあなたのマイグレーションが何を言っているか気にしません。データベースはカラムがどのように見え、そこから行くのかを尋ねます。私はRailsが:limit :precision :scale 、またはそのようなものを強制するとは考えていません。それがデータベースに制約されている(あなたのコードとあなたのデータベースは互いに信頼し合ってはいけません)。 PostgreSQLに切り替えることをお勧めします。これは、最も厳しい空きのデータベースであり、厳密にはデータベースが欲しいものです。
追加された 著者 mu is too short,
そうです、確かに、精度とスケールはSQLiteによって強制されません。私はActiveRecordがデータにそれを強制しているかどうかわからない。 SQLiteはこのアプリの長期的な解決策ではありません。
追加された 著者 Eben Geer,
さて、助けてくれてありがとう、しかし、私はそれが私の現在のジャムから私を得るとは思わない。実際、別のデータベースに切り替えるのは、スキーマを正しく取得することが重要な理由です。たぶん、新しいデータベースに一度転送するだけで、それを一緒にハックすることはできますが、次回の移行時にスキーマが間違ってしまうのは心配です。
追加された 著者 Eben Geer,

答えはありません

0