这是一个愚蠢的问题,我觉得我一定错过了一些简单的东西。我有一个带有quantity
字段的表格。人们在输入数量时不断输入逗号(例如,他们输入12,000
表示一万二千)所以我想在将数量(12000
在示例中)保存到数据库中的整数列之前去掉逗号。
到目前为止,我已经尝试了两种方法。按照此 SO question中的建议覆盖 setter 方法
def quantity=(num)
num.gsub!(',', '') if num.is_a?(String)
self[:quantity] = num.to_i
end
这在某种意义上是有效的。如果我输入12,000
数量字段并提交表单,我会12000
进入数据库。问题是它也绕过了所有quantity
验证。例如,我不再可以验证数量值的存在。不是很好。
我还尝试使用验证前回调(而不是覆盖设置器):
before_validation :sanitize_quantity
def sanitize_quantity
# Doesn't wok because quantity.to_i already called by this point.
end
这不起作用,因为当数量到达回调方法时,Rails 已经调用to_i
了它。这意味着它将在到达回调时12,000
被截断。12
再一次,不好。
除了在客户端剥离逗号之外,我还能尝试什么?
最后一点,我知道这本质上是一件愚蠢的事情,因为某些国家/地区以不同的方式使用句号和逗号。无论如何,我仍然需要这样做。