2

我目前通过安装了money gem 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_pricein daily_saving_potential,则不会出现错误,但是模型中的自定义字段显示默认货币而不是用户定义的货币,而该default_price字段显示定义的正确货币由用户。也许问题与我将货币对象与我的 Pack 模型中的非货币对象相乘这一事实有关?无论如何,当我减去total_money_spentfromtotal_saving_potential

如果您需要更多信息,请告诉我,非常感谢所有帮助!

4

1 回答 1

3

我没有使用过这个 gem,但看起来你并没有按照 money-rails gem 的自述文件

https://github.com/RubyMoney/money-rails

假设您在模型中有一个字段,:default_price_cents您可以执行...

  monetize :default_price_cents, with_model_currency: :currency

...这将自动为您提供一个名为“:default_price”的货币化字段。你不需要定义它,也不需要“货币化”它,它已经是一个金钱属性。

同样,您应该创建名为daily_saving_potential_centsandtotal_saving_potential_cents等的方法total_money_spent_cents等等。您将自动拥有一个方法daily_saving_potentialtotal_saving_potential等等。

在您的方法计算中使用原始 (.._cents) 属性。

于 2014-06-03T12:10:15.320 回答