web-dev-qa-db-ja.com

末尾に2桁の10進数を使用した移行

Rails 3.2
MySQL gem

移行には次のものがあります。

t.decimal :pre_tax_total, default: nil, scale: 2
t.decimal :post_tax_total, default: nil, scale: 2

私が読んだものに基づいて、scale:2は2桁の末尾の小数を生成します。

移行を実行し、テーブル構造を見ると、次のことがわかります。

pre_tax_total   decimal(10,0) 
post_tax_total  decimal(10,0)

これは、MySQLサーバーによって値が切り捨てられることを意味します。これらの列をdecimal(10,2)として作成するためのActiveRecord構文は何ですか?

7
coyotepoint

それは次のようになります:

_t.decimal :pre_tax_total, precision: 10, scale: 2
_

Rails 3移行ガイド はスキップしますが、説明は ソースコード にあります。

_  # Note: The precision is the total number of significant digits,
  # and the scale is the number of digits that can be stored following
  # the decimal point. For example, the number 123.45 has a precision of 5
  # and a scale of 2. A decimal with a precision of 5 and a scale of 2 can
  # range from -999.99 to 999.99.
  #
  # Please be aware of different RDBMS implementations behavior with
  # <tt>:decimal</tt> columns:
  # * The SQL standard says the default scale should be 0, <tt>:scale</tt> <=
  #   <tt>:precision</tt>, and makes no comments about the requirements of
  #   <tt>:precision</tt>.
  # * MySQL: <tt>:precision</tt> [1..63], <tt>:scale</tt> [0..30].
  #   Default is (10,0).
_

最後の行は、decimal(10,0)を取得した理由を部分的に説明しています。

26
Nic Nilov