Rails before_save回调没有正确地从数字中删除逗号

时间:2013-01-05 14:40:01

标签: regex ruby-on-rails-3 callback gsub

我将货币值存储为数据库中的整数(美分),然后在视图侧对其进行格式化。但是,当用户输入类似“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

2 个答案:

答案 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