我决定将价格存储为整数,但我对此有困难。
用户当然会以磅和便士的价格输入价格,我想以便士的形式存储,但这样做的最佳方法是什么。
我到目前为止所尝试的是我模型中的before_save
:
def convert_price
self.price = self.price * 100
end
但是这有两个问题 - 首先我在我的控制器中使用一个事务(以确保我在保存之前做的其他事情也好)所以它似乎乘以100两次!第二个问题是,如果用户输入56.85,例如,查看终端,它会说输入为56,因为在做其他任何事情之前它将被强制转换为Int。
我不想使用Money gem,因为我觉得它太过分了 - 希望有一个简单明了的解决方案。
答案 0 :(得分:-1)
只需删除小数点分隔符即可。如果在金额中找不到小数分隔符,则不提供小数,因此只需乘以100。
def convert_price
if /\./.match(price)
price.gsub!(/\./, '')
else
price *= 100
end
end
为防止价格多次转换,您可以为价格创建自定义设置器:
def price=(val)
if /\./.match(val)
val.gsub!(/\./, '')
else
val *= 100
end
self.price = val.to_i
end
虽然我不确定这会有效。如果您多次设置相同的价格,它将失败。
也许最好的解决方案是使用decimal
类型来存储价格。