18

これは以前に尋ねられたようです: rails decimal precision and scale

ただし、またはのchange_column移行を実行すると、実際にはスキーマやデータベースには影響しませんが、エラーなしで実行されます。:precision:scaledb:migrate

私の移行ファイルは次のようになります。

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

しかし、私のスキーマ (およびデータ) は次のようになります。

t.decimal  "payback_period"

他の誰かがこの問題を抱えていますか?

ありがとう、

ジョシュ

4

4 に答える 4

36

関連する(ただし同じではない)問題がありました。私はちょうどスケールを変更していたので、:scale を変更するときはフルラインが必要です:

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

:decimal (すでにあった) と :precision (すでに 10 だった) を省略すると、移行が失敗します。

于 2011-04-18T02:01:51.777 に答える
6

SQLite3 では機能しません

私が実行しているこの簡単なテスト アプリでは、SQLite3 をセットアップしました。どうやら、SQLite3 は列の型宣言に依存せず、より動的であり、代わりに列の内容を調べます-ここでつまずいたように:

sqlite3 で列の型を変更する

私はそれをテストしていchange_columnませんが、SQLite3 では何にも変換されないため、スキーマが変更されなかったのはそのためだと確信しています。

返信ありがとうございます。

于 2010-04-02T22:26:24.860 に答える
1

ファイルを削除して再生成しdb\schema.rbます。

rake db:schema:dump
于 2010-03-15T21:18:16.150 に答える
0

ハックですが、必要な場所に移動する必要があります。

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
于 2010-03-16T22:00:25.130 に答える