Convert comma to point as delimiter

别说谁变了你拦得住时间么 提交于 2019-12-30 08:17:10

问题


How can I convert user number input from something like 11,5 to 11.5?

I have tried the following as callback:

before_validation :comma_to_delimiter

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

But this doesn't work. I want the user to be able to type in whatever he wants as delimiter - currently, the app throws an error when the user uses a comma instead of a point.


回答1:


What you're doing may not be the best way, so perhaps someone can answer with a better approach. But to get your line working you need to make it actually persist the change.

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

Will just return the change, but that doesn't go anywhere in a callback!

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

Will persist the change within the object.




回答2:


In some countries comma is the standard currency delimiter and if a user types "19,99" into a form it will be saved as "19.00" unless you handle the delimiter conversion manually. I think the right way to solve this is to write custom attribute setters.

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


来源:https://stackoverflow.com/questions/17652104/convert-comma-to-point-as-delimiter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!