我目前通过money-rails
安装了金钱宝石并且工作得很好。我有一个名为:default_price
和:default_price_cents
的货币化对象,我使用:currency
列来定义货币。我还有一个:default_packs
列,它是一个用户定义的整数货币,以及一个Pack模型,它每天都会存储一个新条目,其中包含:date
列和:amount
列。
这是 user.rb
has_many :packs
register_currency :usd
monetize :default_price_cents, with_model_currency: :currency
monetize :default_price, with_model_currency: :currency
monetize :daily_saving_potential, with_model_currency: :currency
monetize :total_saving_potential, with_model_currency: :currency
monetize :total_money_spent, with_model_currency: :currency
monetize :total_savings, with_model_currency: :currency
def daily_saving_potential
return default_price * default_packs
end
def total_saving_potential
days = self.packs.count
return days * daily_saving_potential
end
def total_money_spent
amount = self.packs.map(&:amount).sum
return amount
end
def total_savings
return total_saving_potential - total_money_spent
end
问题
total_money_spent
汇总了我的Pack模型中:amount字段的所有条目。出现问题的是,在我的视图中调用total_savings
时,我收到错误消息 Unknown Method "exchange_to" for 0:fixnum
。
有趣的是,如果我在:default_price_cents
中使用:default_price
代替daily_saving_potential
,那么我就不会收到错误,但我在模型中显示自定义字段默认货币而不是用户定义的货币,而default_price
字段显示用户定义的正确货币。也许这个问题与我从我的Pack模型中将货币对象与非货币对象相乘的事实有关?无论如何,当我从total_money_spent
total_saving_potential
时会出现问题
如果您需要更多信息,请告诉我,非常感谢所有帮助!
答案 0 :(得分:3)
我没有使用过这个宝石,但它看起来并不像是你跟着读金钱的铁轨宝石
https://github.com/RubyMoney/money-rails
假设您在模型:default_price_cents
中有一个字段,则可以执行...
monetize :default_price_cents, with_model_currency: :currency
...这将自动为您提供一个名为':default_price`的货币化字段。您不需要定义它,也不需要“货币化”它,它已经是货币属性。
同样,您应该创建名为daily_saving_potential_cents
和total_saving_potential_cents
以及total_money_spent_cents
等等的方法。您将自动拥有方法daily_saving_potential
和total_saving_potential
等等。
在您的方法计算中,使用原始(.._美分)属性。