Я предпочитаю хранить валюту в базе данных как целое число наименьшего номинала (пенсов, центов и т. Д.) И выполнять вычисления на основе этого.
add_column :product, :price, :integer
Конечно, вы захотите, чтобы любой ввод и отображение формы были в той форме, которую ожидают люди, поэтому мы добавим в модель несколько вспомогательных методов, чтобы помочь с этим.
class Product < ActiveRecord::Base
def price_dollars
self.price / 100
end
def price_dollars=(val)
self.price = val * 100
end
end
В консоли мы получаем:
> prod = Product.new
=> [snip]
> prod.price_dollars = 12.93
=> 12.93
> prod.price
=> 1293
> prod.price_dollars
=> 12.93
> prod.price = 1691
=> 1691
> prod.price_dollars
=> 16.91
Я уверен, что, вероятно, есть плагин, который прекрасно справится с этим.