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

dch*_*cke 10 validation ruby-on-rails delimiter

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

我尝试了以下作为回调:

before_validation :comma_to_delimiter

def comma_to_delimiter
  self.price.to_s.gsub(',', '.').to_f
end
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*att 15

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

self.price.to_s.gsub(',', '.').to_f
Run Code Online (Sandbox Code Playgroud)

只会返回更改,但这不会回调!

self.price = self.price.to_s.gsub(',', '.').to_f
# OR
self.price.to_s.gsub!(',', '.').to_f
Run Code Online (Sandbox Code Playgroud)

将在对象内持续进行更改.

  • 它不会在逗号后保存数字.如果是`5,75`,则保存`5.00`.还是只适合我?谢谢! (3认同)

Sha*_*goz 13

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

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

  • 对于所有浮动属性,全局处理它会很好. (3认同)