0

我已决定将价格存储为整数,但我对此有困难。

用户当然会以英镑和便士输入价格,我想以便士的形式存储,但是最好的方法是什么。

到目前为止,我尝试过的是before_save在我的模型中:

def convert_price
  self.price = self.price * 100
end

但这有两个问题——首先我在我的控制器中使用了一个事务(以确保在保存之前我正在做的其他事情也可以)所以它似乎乘以 100 两次!第二个问题是,例如,如果用户输入 56.85,在终端中查看它会说输入是 56,因为它会在执行任何其他操作之前将其类型转换为 Int。

我不想使用 Money gem,因为我觉得它有点矫枉过正——希望有一个好的简单的解决方案。

4

1 回答 1

-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类型来存储价格。

于 2013-10-24T14:19:47.737 回答