我的模特有:
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
等值的最佳/最干净方法是什么? (我将输出格式化为货币,在其他地方,在装饰器中)。
答案 0 :(得分:1)
如果您只想保存原始值,则可以创建自定义设置器:
def budget= value
write_attribute :budget, value.scan(/[0-9]/).join.to_f
end
但是如果您计划在项目中使用货币做更多事情,我强烈建议您查看money-rails gem。它为您提供解析器,验证器,算术运算符以及更多处理货币的功能。