在我的Rails应用程序中,我希望用户能够输入百分比值,从0.0到100.0。在数据库中,我想将它们存储为0.00到1.00的小数,这样计算就更容易了。
我目前通过模型中的getter和setter来做这件事。但是,当我在模型中编写派生属性时,它们最终使用的是0-100值而不是0-1,这样就无法将其存储在0-1值中以便于计算:
# in the model `quote.rb`
def discount=(value)
write_attribute :discount, value.to_f / 100
end
def discount
read_attribute(:discount).to_f * 100
end
def final_price
price * (1 - discount)
# this generates a wrong value,
# because if the user inputs discount as 50 to represent 50%,
# the final price will be `price * -49`
end
关于更好地实现这一目标的任何想法?
答案 0 :(得分:0)
我会使用十进制列(以避免issues with floats and rounding)存储原始值(以百分比表示)并避免强制转换。
然后您可以使用以下方法简单地计算净价:
def final_price
price * (discount || 100 * 0.01)
end
当涉及到向用户呈现输出时,您希望查看money gem,因为它可以更轻松地处理区域设置和多种货币。