我在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不更新)
时会出现问题答案 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解决了这个问题。问题: