如何为Decimal属性接受“$ 10,000”格式化输入?

时间:2012-07-18 00:07:55

标签: ruby-on-rails-3.2

我的模特有:

validates :budget,  :numericality => {:greater_than_or_equal_to => 0.01},
                    :presence => true,
                    :format => { :with => /^[$]?([0-9][0-9]?([,][0-9]{3}){0,4}([.][0-9]{0,4})?)$|^[$]?([0-9]{1,14})?([.][0-9]{1,4})$|^[$]?[0-9]{1,14}$/ }

但提交带有美元符号或逗号值的表单会导致设置:预算为0.0

在此十进制列中接受$1,000等值的最佳/最干净方法是什么? (我将输出格式化为货币,在其他地方,在装饰器中)。

1 个答案:

答案 0 :(得分:1)

如果您只想保存原始值,则可以创建自定义设置器:

def budget= value
  write_attribute :budget, value.scan(/[0-9]/).join.to_f
end

但是如果您计划在项目中使用货币做更多事情,我强烈建议您查看money-rails gem。它为您提供解析器,验证器,算术运算符以及更多处理货币的功能。