Как добавить сумму поля из объединенной модели с использованием Rails 3.2 и MySql 5.5?Как добавить сумму поля из объединенной модели в Rails?
Скажем, у меня есть модели, как это:
class Account < ActiveRecord::Base
attr_accessible :number
has_many :operations
end
class Operation < ActiveRecord::Base
belongs_to :account
attr_accessible :op_type, # either 'deposit' or 'withdrawal'
:amount
end
нужно выбрать учетные записи с помощью некоторого условия и добавить к каждому из них суммы всех вкладов на счет.
Это можно сделать с помощью SQL, как это:
SELECT *,
IFNULL((
SELECT SUM(amount)
FROM operations
WHERE operations.account_id = accounts.id AND operations.op_type = 'deposit'
), 0) as total_deposits
FROM accounts
WHERE <condition for accounts>
Как я могу сделать это с помощью Rails (с помощью LEFT JOIN другой способ достичь того же результата.)?
Я хочу что-то вроде этого:
accounts = Account.where(<mycondition>). join(???). sum(???) # What should be here?
accounts.each do |a|
puts "Account #{a.number} has deposited #{a.total_deposits} total."
end
'Operation.joins (: account)' не работает, потому что он не возвращает учетные записи, у которых еще нет учетных записей. Мне нужны эти учетные записи в наборе результатов. total_deposits должно быть 0 для них. –