Rails Money无法正常保存

时间:2016-10-13 16:34:49

标签: ruby-on-rails ruby

我根据这个答案使用Money gem和composed_of:https://stackoverflow.com/a/3843805/4162458

我的数据库中有一个整数列:discount

product.rb

  class Product < ActiveRecord::Base

    composed_of :discount_display,
      :class_name => 'Money',
      :mapping => %w(discount cents),
      :converter => Proc.new { |value| Money.new(value) }

以我的形式:

<%= f.number_field :discount_display, class: 'form-control', min: "0" %>

但是,如果我输入12,它会在数据库中保存为12,并在我刷新为0.12时显示在表单上。

我怎么能拥有它,以便当你输入“12”时它在数据库中保存为1200并正确显示,因为答案似乎应该说应该发生?

1 个答案:

答案 0 :(得分:0)

根据documentation

  

将货币值表示为整数,以美分为单位。这避免了漂浮   点四舍五入错误。

因此,如果您希望从用户收取美元,那么您需要在保存到数据库之前将其转换为美分。也许,你的转换器应该是

Proc.new { |value| Money.new(value * 100) }

Proc.new { |value| Money.from_amount(value, "USD") }