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

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

我尝试了以下作为回调:

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

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

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

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

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

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

将在对象内持续更改。

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

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