web-dev-qa-db-ja.com

Rails移行を作成して精度を削除/変更し、10進数でスケールするにはどうすればよいですか?

データベースの10進数(PostgreSQL NUMERIC)フィールドから精度属性とスケール属性を削除しようとしていますか?

フィールド:

t.decimal  "revenue_per_transaction", :precision => 8, :scale => 2
t.decimal  "item_quantity",           :precision => 8, :scale => 2
t.decimal  "goal_conversion",         :precision => 8, :scale => 2
t.decimal  "goal_abandon",            :precision => 8, :scale => 2
t.decimal  "revenue",                 :precision => 8, :scale => 2

これらを無制限のスケールと精度に変更したり、スケールを拡大したりするには、移行に何を追加する必要がありますか?現在、私はスケール制限に達し、次のようなエラーが発生しています。

ERROR:   numeric field overflow

これがコンテキストです: "PG :: Error-数値フィールドオーバーフロー" on Herok

30
Richard Burton

フォーマット :

change_column(table_name, column_name, type, options): Changes the column to a different type using the same parameters as add_column.

まずあなたのターミナルで:

Rails g migration change_numeric_field_in_my_table

次に、移行ファイルで:

class ChangeNumbericFieldInMyTable < ActiveRecord::Migration
  def self.up
   change_column :my_table, :revenue_per_transaction, :decimal, :precision => give whatever, :scale => give whatever
  end
end

その後

run rake db:migrate

ソース: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

63
Dipak Panchal

移行ファイルで、フィールドを:integerに変更し、run rake db:migrateを実行します。

0
jous32