保存前清理美元价值

Sanitize dollar value before saving

我在表单上有一个输入字段,让用户输入美元金额。我正在使用 autoNumeric 来屏蔽该字段,以便当用户输入 1000 时,它会在文本字段中显示 1,000.00。

数据库中的列 (requested_amount) 是精度 => 8 和小数位数 => 2 的小数。

我已经根据其他 SO 答案进行了回调,尝试在验证和保存到数据库之前从输入中去除逗号。

def strip_commas_from_dollar_fields
  self.requested_amount = self.requested_amount.to_s.gsub(',', '')
end

# Callback
before_validation :strip_commas_from_dollar_fields

传入的params hash然后我提交表单:

 "requested_amount"=>"80,000.00"

但是,当我在控制台中查看号码时,它显示:

 => 80.0 

我需要数据库中的数字为 80000.00。

因为:

def strip_commas_from_dollar_fields
  p self.requested_amount // <- here is 80.0 already

  self.requested_amount = self.requested_amount.to_s.gsub(',', '')
end

检查一下。因此,不要以这种方式尝试围绕 requested_amount 字段创建包装器:

def requested_amount_wrapper=(val)
    self.requested_amount = val.to_s.gsub(',', '')
end

def requested_amount_wrapper
    self.requested_amount
end

并在您的散列参数中使用此包装字段:

"requested_amount_wrapper"=>"80,000.00"