Добавление преобразования объекта Money в запрос суммы в Rails 3.1 - PullRequest
0 голосов
/ 13 января 2012

Еще один вопрос noob, который, кажется, должен быть простым:

Благодаря полученной здесь помощи я могу легко получить сумму выбранных транзакций:

@trip_hash = transactions.sum(:amount_cents, :group => :trip_id)

Однако проблема, является то, что столбец: amount_cents представляет необработанный объект Money, который необходимо преобразовать перед суммированием, чтобы приспособить обмен валюты.Деньги, «состоящие из» процедур, выглядят так:

composed_of :amount, 
          :class_name => "Money", 
          :mapping => [%w(amount_cents cents), %w(currency currency_as_string)], 
          :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) }, 
          :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }

Я могу легко позвонить:

transactions.map(&:amount).inject(:+)

, чтобы получить преобразованный общий итог, но я не могу понять, каксделайте это в контексте группировок.

Большое спасибо, снова, за помощь!

1 Ответ

1 голос
/ 14 января 2012

Потребовалось много канудлинга и чтения, но, наконец, понял следующее:

trip_hash = bankroll.transactions.group_by(&:trip_id).map {|tr,t| Hash[tr, t.map(&:amount).inject(:+)]}

=>[{0=>#<Money cents:137693 currency:USD>}, {7=>#<Money cents:-39509 currency:USD>}, {10=>#<Money cents:50009 currency:USD>}]

Карта на карте сделала это!Хеширование делает его удобным для просмотра и сохраняет объект Money для форматирования ....

...