Ruby on rails 从rails中的整数或小数中剥离逗号

Ruby on rails 从rails中的整数或小数中剥离逗号,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,整数或小数是否有gsub等价物?gsub应该处理整数吗?基本上,我只是想在ruby表单中输入decimal,让用户能够使用逗号。例如,我希望用户能够输入1000.99 我试过使用 before_save :strip_commas def strip_commas self.number = self.number.gsub(",", "") end 但是得到以下错误“未定义方法'gsub'for 8:Fixnum”,其中“8”被替换为用户输入的任何数字 如果您的字段是一个F

整数或小数是否有gsub等价物?gsub应该处理整数吗?基本上,我只是想在ruby表单中输入decimal,让用户能够使用逗号。例如,我希望用户能够输入1000.99

我试过使用

before_save :strip_commas

def strip_commas
    self.number = self.number.gsub(",", "")    
end

但是得到以下错误“未定义方法'gsub'for 8:Fixnum”,其中“8”被替换为用户输入的任何数字

如果您的字段是一个Fixnum,它将永远不会有逗号,因为Rails必须将用户输入转换成一个数字才能存储在那里

但是,它将通过在输入字符串上调用_i来实现这一点,这不是您想要的。 将普通setter重写为

def price=(num)
  num.gsub!(',','') if num.is_a?(String)
  self[:price] = num.to_i
end
未经测试,但类似的东西应该可以工作

您需要在输入仍然是字符串时获取逗号

编辑: 如注释中所述,如果要接受小数并创建非整数的内容,则需要与
String.to_i
不同的转换。此外,不同的国家对数字标点符号有不同的约定,因此这不是一个完整的解决方案。

尝试
self.number.gsub(/\D/,'')
。也就是说,删除所有不是数字的内容。正则表达式不区分整数、浮点数、小数等。它们都是字符串。Rails不会为您正确地转换它,因为它只是在其上调用
#to_i
#to_f

编辑:


实际上:
self.number.gsub(/[^\d\.]/,'')。to_f
:所有不是数字或小数点的内容,并将其转换为浮点数。

数字字段是浮点数吗?Rails应该为您处理转换,这样逗号就不会出现在数据中。字段是十进制的。当我在字段中输入类似2000的内容时,我在mysql数据库中得到了“2”。工作得非常好!我只需要换成“从我到你”。由于Fixnum中缺少逗号,我快疯了。谢谢。事实上,我忘了你也希望允许小数,我们处理的是Fixnum而不是整数。。。但你有这个想法。我会编辑答案。请注意,这可能会让你在下面的某个地方发现,因为欧洲人会键入类似于100,00的内容,意思是100.00,你会将其解释为10000。我是凭经验说的。幸运的是,用户都是我们的。至少对于这个应用程序。然而,在未来,有没有更好的方法可以做到这一点,这是更地区不可知论?伟大的答案
self[:price]=num.to\u f
是正确的方法。我尝试了
self.price=num.to\f
它会引发
SystemStackError(堆栈级别太深)
您不需要转义
,因为当它在
“[.]'
范围内时,它会失去其特殊性并自动成为文本。所以
[^\d.]
更正确。不过,让它转义是可以的,因为它可以作为行为的视觉提醒。