当比例部分改变时,Rails十进制(货币)数字不保存

时间:2014-01-10 19:53:20

标签: ruby-on-rails ruby decimal

我在Rails中创建了一个价格字段,其精度为8,刻度为2(或Postgres中的数字(8,2))。当我尝试更新比例部分时,它会生成一个空事务,但我无法理解为什么。对于发生了什么有任何想法?

控制台输出:

irb(main):051:0> puts o.price
8.0
=> nil

irb(main):052:0> o.price = "8,22"
=> "8,22"

irb(main):053:0> puts o.price
8.22
=> nil

irb(main):054:0> o.save
   (0.5ms)  BEGIN
   (0.4ms)  COMMIT
=> true

irb(main):055:0> o.reload; puts o.price    
8.0
=> nil

编辑:更新整数正常,只有在更新比例部分时才会出现问题:

irb(main):017:0* puts o.price
8.0
=> nil

irb(main):018:0> o.price = "9,22"
=> "9,22"

irb(main):019:0> o.save
   (0.4ms)  BEGIN
   (0.9ms)  UPDATE "order_items" SET "price" = 9.22, "updated_at" = '2014-01-10 20:17:31.753908' WHERE "order_items"."id" = 1469
   (22.1ms)  COMMIT
=> true

irb(main):020:0> o.reload; puts o.price
9.22
=> nil

编辑2:还测试了其他小数(8,22 => 8,44)并且它有效。当价格四舍五入为0(8,00 => 8,22不更新)

时会出现问题

2 个答案:

答案 0 :(得分:1)

当你这样做时:

o.price = "8,22"

您指定字符串对象,而不是十进制值。由于您使用昏迷作为分隔符,'8,22'.to_f会返回8.0

尝试指定一个数字。

o.price = 8.22 

答案 1 :(得分:1)

原来这是delocalize gem中的一个错误。将其从0.3.1升级到0.3.2解决了这个问题。问题:

https://github.com/clemens/delocalize/issues/57