5

そのため、float を多用する (「to_f」を多用する) ruby​​ on rails コードがあります。「float」タイプとしても格納されているいくつかの数値を含むデータベースを使用します。

このコードとデータベースを 10 進数のみに移行したいと考えています。データベース列を 10 進数に移行するのと同じくらい簡単ですか (10 進数列を追加し、浮動小数点列を 10 進数列にコピーし、浮動小数点列を削除し、10 進数列を古い浮動小数点列名に変更します)、コード内の「to_f」を「to_d」に置き換えます。 ? それとも、それ以上のことをする必要がありますか?

みんなありがとうラファエル

4

1 に答える 1

18

マイグレーションを使用して簡単にこれを行うことができ、Rails がコードの一部を生成します。

コマンド プロンプトから、新しい移行を作成します。

rails generate migration change_price_column_to_decimal

Rails はディレクトリに移行を作成しますdb/migrate。ファイル名は、タイムスタンプの後に_change_price_column_to_decimal.rb.

生成された移行で、フィールドを変換するメソッドを追加upします。down

class ChangePriceColumnToDecimal < ActiveRecord::Migration
  def up
    change_column :products, :price, :decimal, :precision => 15, :scale => 2, null: false
  end

  def down
    # Either change the column back, or mark it as irreversible with:
    raise ActiveRecord::IrreversibleMigration
  end
end

移行を実行するには、コマンド プロンプトから適切な rake タスクを実行します。

rake db:migrate

これにより、データベースが変換されます。浮動小数点数から 10 進数に変換すると、設定内容によっては有効桁数が失われることに注意してくださいscale。ただし、製品の価格を扱っている場合、これはおそらく大きな問題にはなりません。

于 2012-11-06T17:12:42.987 に答える