从整数中删除逗号或在rails中删除小数

Oak*_*510 8 ruby ruby-on-rails ruby-on-rails-3

是否有整数或小数的gsub等价物?gsub应该使用整数吗?基本上我只是尝试将十进制输入到ruby形式以及用户能够使用逗号的内容.例如,我希望用户能够输入1,000.99.

我试过用了

before_save :strip_commas

def strip_commas
    self.number = self.number.gsub(",", "")    
end
Run Code Online (Sandbox Code Playgroud)

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

Don*_*oby 14

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

但是,它会通过在输入字符串上调用to_i来实现,这不是你想要的.覆盖正常的二传手

def price=(num)
  num.gsub!(',','') if num.is_a?(String)
  self[:price] = num.to_i
end
Run Code Online (Sandbox Code Playgroud)

没有经过测试,但类似的东西应该有效......

当输入仍然是一个字符串时,你需要得到逗号.

编辑: 如评论中所述,如果您想接受小数,并创建不是整数的东西,则需要不同的转换String.to_i.此外,不同的国家/地区对数字标点符号有不同的约定,因此这不是一个完整的解决方案.

  • 请注意,这可能会让你陷入困境,因为欧洲人会输入类似100,00的东西,意思是100.00,你会把它解释为10000.我从经验中说出来. (8认同)