0

我的模型有:

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}$/ }

但是提交带有美元符号或逗号值的表单会导致它设置 :budget 为0.0.

接受像$1,000这个十进制列这样的值的最好/最干净的方法是什么?(我在装饰器中将输出格式化为货币,别处)。

4

1 回答 1

1

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

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

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

于 2012-07-18T06:28:17.370 回答