是否有整数或小数的gsub等价物? gsub应该使用整数吗?基本上我只是尝试将十进制输入到ruby形式以及用户能够使用逗号的内容。例如,我希望用户能够输入1,000.99。
我尝试过使用
before_save :strip_commas
def strip_commas
self.number = self.number.gsub(",", "")
end
但得到以下错误“未定义的方法`gsub'为8:Fixnum”,其中“8”被用户输入的任何数字替换。
答案 0 :(得分:14)
如果你的字段是Fixnum,它将永远不会有逗号,因为Rails必须将用户输入转换为数字才能将其存储在那里。
但是,它会通过在输入字符串上调用to_i来实现,这不是你想要的。 将普通的setter改为
def price=(num)
num.gsub!(',','') if num.is_a?(String)
self[:price] = num.to_i
end
未经测试,但类似的东西应该有用......
当输入仍为字符串时,您需要使用逗号。
修改强>
如注释中所述,如果要接受小数,并创建不是整数的内容,则需要与String.to_i
不同的转换。此外,不同的国家/地区对数字标点符号有不同的约定,因此这不是一个完整的解决方案。
答案 1 :(得分:3)
尝试self.number.gsub(/\D/, '')
。也就是说,删除不是数字的所有内容。 Regexen不区分整数,浮点数,小数等。它是所有字符串。并且Rails不会为您正确转换它,因为它只是在其上调用#to_i
或#to_f
。
编辑:
实际上:self.number.gsub(/[^\d\.]/, '').to_f
:不是数字或小数点的所有内容,并将其转换为浮点数。