11

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

我尝试了以下回调:

before_validation :comma_to_delimiter

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

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

4

2 回答 2

18

你正在做的可能不是最好的方法,所以也许有人可以用更好的方法来回答。但是要让你的生产线正常工作,你需要让它真正持久化变化。

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

只会返回更改,但这不会在回调中进行!

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

将保持对象内的更改。

于 2013-07-15T10:33:09.313 回答
14

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

class Product < ActiveRecord::Base
  def price=(val)
    val.sub!(',', '.') if val.is_a?(String)
    self['price'] = val
  end
end
于 2014-05-14T13:09:11.023 回答