使用 lambda 或 proc 和 rails-money

Posted

技术标签:

【中文标题】使用 lambda 或 proc 和 rails-money【英文标题】:using a lambda or proc and rails-money 【发布时间】:2013-07-11 19:22:44 【问题描述】:

我希望能够使用模型父级设置的货币动态设置模型上的货币。

像这样:

class Event < ActiveRecord::Base
  belongs_to :edition
  monetize :price_cents, :with_currency => proc  |event| event.edition.currency 

event.edition.currency 从模型的父级返回一个符号...例如:gbp

但它不起作用。默认约定是:

monetize :bonus_cents, :with_currency => :gbp

哪个效果好...有什么想法吗?

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

【问题讨论】:

我遇到了同样的问题。你找到解决办法了吗? 【参考方案1】:

试试这个:

class Event < ActiveRecord::Base
  belongs_to :edition
  monetize :price_cents

  def currency_for_price
    Money::Currency.find(edition.currency)
  end
end

我没有彻底测试它,但它似乎有效。

2.0.0-p195 :012 > Event.new(
                      edition: Edition.new(currency: :gbp),
                      price: 123
                  ).price
 => #<Money fractional:12300 currency:GBP>
2.0.0-p195 :013 > Event.new(
                      edition: Edition.new(currency: :usd),
                      price: 456
                  ).price
 => #<Money fractional:45600 currency:USD>

【讨论】:

保存前似乎可以工作,但保存后记录仍然设置为默认货币。 ;-(

以上是关于使用 lambda 或 proc 和 rails-money的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用 lambda/proc ?解释它的重要性 [重复]

如何将方法或 lambda 转换为非 lambda proc

Ruby 中的 proc 和 lambda 有啥区别?

proc、Proc.new、lambda 和 stabby lambda 之间的速度差异

什么是 procs 和 lambdas?请提供实际示例[重复]

返回 procs、lambdas 和 blocks 中的语句