将逗号转换为点作为分隔符

时间:2013-07-15 10:30:17

标签: ruby-on-rails validation delimiter

如何将用户编号输入从11,5转换为11.5?

我尝试了以下回调:

before_validation :comma_to_delimiter

def comma_to_delimiter
  self.price.to_s.gsub(',', '.').to_f
end

但这不起作用。我希望用户能够输入任何他想要的分隔符 - 当前,当用户使用逗号而不是点时,应用程序会抛出错误。

2 个答案:

答案 0 :(得分:15)

你所做的可能不是最好的方式,所以也许有人可以用更好的方法回答。但是为了让你的生产线工作,你需要让它真正坚持改变。

self.price.to_s.gsub(',', '.').to_f

只会返回更改,但这不会在回调中发生任何变化!

self.price = self.price.to_s.gsub(',', '.').to_f
# OR
self.price.to_s.gsub!(',', '.').to_f

将在对象中保留更改。

答案 1 :(得分:13)

在某些国家/地区,逗号是标准的货币分隔符,如果用户在表单中键入“19,99”,则除非您手动处理分隔符转换,否则它将保存为“19.00”。我认为解决这个问题的正确方法是编写自定义属性设置器。

class Product < ActiveRecord::Base
  def price=(val)
    val.sub!(',', '.') if val.is_a?(String)
    self['price'] = val
  end
end