如果金额设置为0.5,则会出现奇怪的行为

时间:2011-09-16 10:31:49

标签: ruby-on-rails-3

我的表格如下:

<%= f.select(:amount, Order::AMOUNT_VALUES, {:blank => false}) %> 

我的模特有:

  AMOUNT_VALUES = { '$ 0.50' => 0.5, '$ 1' => 1, '$ 2' => 2, '$ 5' => 5, '$ 10' => 10 }
  validate :amount_values_to_be_of_certain_values

  def amount_values_to_be_of_certain_values
    puts self.amount
    unless AMOUNT_VALUES.has_value? self.amount
      errors.add(:amount, 'not a valid field')
    end
  end

如果我选择0.5并提交表格。表格抱怨说“数量不是有效字段”。如果我选择其他值之一,则表单提交正确。

似乎问题是小数点以0开头。

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

如果您将金额存储在一个整数字段中,那么它将对您放入其中的任何浮点数进行舍入。这就是self.amount.to_f为0.0的原因,因为将0.5放入整数字段会将其更改为0,而0.to_f则为0.0。