Rails不会正确返回小数

时间:2012-08-16 21:01:27

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用Rails 3.2.5,当它返回值o:price进行编辑时,它只会带一个小数,例如。 600.0,我需要我带来2位小数(例如600.00)在数据库中记录600.00,在我的区域设置我已经设置为2位小数,但仍然无法工作。

我试过

number_to_currency(:price, :precision => 2) 

但它适用于像“show”这样的视图,我需要在textfield上返回编辑的propper值。

在我的迁移中,字段“price”设置为十进制(15,2)。

有人可以帮忙吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

文本字段在字段的“本机”值上运行,因为它由ActiveRecord处理,而不是存储在数据库中。

货币字段很棘手,因为ActiveRecord正在数据库表示和ruby / rails表示之间进行转换,即BigDecimal。

如果您的目标是希望向用户展示$1,000.00并让他们对其进行编辑,则可以采取以下建议:

  1. 使用Money Ylan S所指的Money。
  2. 使用“就地编辑”窗口小部件screencast。您可以使用number_to_currency来显示该值。单击时,输入字段将显示没有货币符号的值,数千个分隔符的逗号等。请注意,这是Excel的工作方式:编辑货币字段的值时,不要输入1,000。你输入1000。

答案 1 :(得分:1)

根据我的经验,不是使用小数来存储货币,而是以整数形式存储以美分为单位的金额。这将解决多个问题,包括您现在拥有的问题。

过去使用Money gem及其伴侣money-rails取得了很大的成功。

答案 2 :(得分:1)

使用'delocalize'宝石解决了问题。 老但金! :)谢谢大家!

答案 3 :(得分:0)

让text_field显示格式化值的最简单方法是显式传递它,如下所示:

f.text_field :price, :value => number_to_currency(:price, :precision => 2) 

您需要解释(并可能重新格式化)处理表单的控制器方法中的值。

请参阅How can I format the value shown in a Rails edit field?