I have the following models:
class Client < ActiveRecord::Base
has_many :accounts, dependent: :destroy
end
class Account < ActiveRecord::Base
belongs_to :client
has_many :operations, dependent: :destroy
end
class Operation < ActiveRecord::Base
belongs_to :account
end
I manage to extract clients and all their operations grouped by client
as
follows:
scope :operations_by_client, joins(:client,
:operations).select('clients.firstname, clients.lastname,
sum(operations.total) as total').group('clients.id, clients.firstname,
clients.lastname').order('clients.lastname')
Now how to tune/change it in case if I don't need to calculate SUM of
the
operations but to use a special method that would calculate the sum of
all
the operations for the specified client? I mean that I should exclude
certain total values from the calculation depending on the operation
type.
Thanks and regards
on 2012-11-20 13:02
on 2012-11-20 15:01
Finally I implemented ut as follows:
class Client < ActiveRecord::Base
...
scope :accounts_sum, includes(:accounts =>
:operations).group('clients.id').order('clients.lastname')
def accounts_balance
accounts.map(&:balance).inject(:+) unless accounts.empty?
end
end
And here are the changes in the OperationsController:
def index
@operations = Client.accounts_sum.paginate(page: params[:page])
@total = @operations.map(&:accounts_balance).inject(:+) unless
@operations.empty? #to be able to display the total of all the existing
accounts.
end
HTH
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.