问题对货币对象执行数学运算 - “未知方法”exchange_to“for 0:fixnum”[Rails 4] [Money Gem]

时间:2014-06-03 11:48:07

标签: ruby-on-rails ruby model money-rails

我目前通过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时会出现问题

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

1 个答案:

答案 0 :(得分:3)

我没有使用过这个宝石,但它看起来并不像是你跟着读金钱的铁轨宝石

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

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

  monetize :default_price_cents, with_model_currency: :currency

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

同样,您应该创建名为daily_saving_potential_centstotal_saving_potential_cents以及total_money_spent_cents等等的方法。您将自动拥有方法daily_saving_potentialtotal_saving_potential等等。

在您的方法计算中,使用原始(.._美分)属性。