我根据这个答案使用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并正确显示,因为答案似乎应该说应该发生?
答案 0 :(得分:0)
将货币值表示为整数,以美分为单位。这避免了漂浮 点四舍五入错误。
因此,如果您希望从用户收取美元,那么您需要在保存到数据库之前将其转换为美分。也许,你的转换器应该是
Proc.new { |value| Money.new(value * 100) }
或
Proc.new { |value| Money.from_amount(value, "USD") }