无法在Rails 3的文本字段中显示小数

时间:2011-07-02 04:34:56

标签: ruby-on-rails bigdecimal

困惑的Rails 3新手。我的模型的purchase_price属性定义如下:

t.decimal :purchase_price, :precision => 12, :scale => 2, :default => 0.00

我的目标是拥有一个简单的Rails 3应用程序,我可以在其中查看和编辑此值。在我的模型中,我定义了一个自定义的getter来强制2位小数始终存在。

def purchase_price
  sprintf( "%.2f",attributes['purchase_price'])
end

这可以从控制台和我显示节目页面时正常工作。在编辑页面上,我有一个文本字段来编辑这个值。我的问题是,如果此值保存为' 123.00'该值显示为' 123.0'。

问题:

  1. 为什么我的自定义getter没有被调用?
  2. 为什么显示1个小数而不是2个小数?
  3. 更新

    1. 存储在MySQL中的十进制值:100.20
    2. 从控制台返回的值:100.20
    3. 文本字段中显示的值:100.2
    4. 通过Firebug返回的值:" 100.2"
    5. 文本字段长度不是问题。
    6. 如果db中的值为100.21,则它将正确显示为100.21

1 个答案:

答案 0 :(得分:2)

试试这个

f.text_field :purchase_price, :value=>number_to_currency(f.object.purchase_price, :unit=>'')

这应该将数字转换为货币(两位小数),而:unit=>''将不包括“$”。

我建议您删除自定义purchase_price方法,并在需要时使用number_to_currency帮助程序。覆盖purchase_price访问器并不是一个坏主意,但它可能会混淆一些可能期望数字而不是字符串的东西。