我将货币值存储为数据库中的整数(美分),然后在视图侧对其进行格式化。但是,当用户输入类似“175,000”的内容时,存储在DB中的值为“175”。它似乎停在第一个逗号,而不是存储其余的零。我已经验证(使用rubular)正则表达式正确选择任何非零或十进制值并只留下数字。我只是不确定为什么它会停留在第一个逗号。
# model
before_save :convert_amounts_to_cents
def convert_amounts_to_cents
self.loan_amount = loan_amount.to_s.gsub(/[^0-9\.]/, "").to_i
end
答案 0 :(得分:0)
实际上,保存时175和175.00的表示方式相同。最右边的00是隐含的。
但是,当您向用户显示信息时,您可以通过正确的格式选择小数位数。
答案 1 :(得分:0)
这是旧的ActiveModel功能,它在您设置值时将传递的值转换为整数,因此before_save
在这种情况下为时已晚。
尝试覆盖loan_amount=
:
def amount=(amount)
self[:amount] = amount.to_s.gsub(/[^0-9\.]/, "").to_i
end