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