如何将用户编号输入从11,5转换为11.5?
我尝试了以下回调:
before_validation :comma_to_delimiter
def comma_to_delimiter
self.price.to_s.gsub(',', '.').to_f
end
但这不起作用。我希望用户能够输入任何他想要的分隔符 - 当前,当用户使用逗号而不是点时,应用程序会抛出错误。
答案 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