通过Ruby on Rails中的getter和setter表示百分比

时间:2017-04-05 18:21:29

标签: ruby-on-rails ruby getter-setter

在我的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

关于更好地实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

我会使用十进制列(以避免issues with floats and rounding)存储原始值(以百分比表示)并避免强制转换。

然后您可以使用以下方法简单地计算净价:

def final_price
  price * (discount || 100 * 0.01)
end

当涉及到向用户呈现输出时,您希望查看money gem,因为它可以更轻松地处理区域设置和多种货币。