Hi all,
Just curious if anyone knows a cleaner way to write this query...
def payments_for(start_on, end_on) sum = 0 self.leases.each { |lse| sum += lse.payments.within(start_on, end_on).sum(:amount) } sum end
Thanks!
Hi all,
Just curious if anyone knows a cleaner way to write this query...
def payments_for(start_on, end_on) sum = 0 self.leases.each { |lse| sum += lse.payments.within(start_on, end_on).sum(:amount) } sum end
Thanks!
NOTE: This is completely off the top of my head and quite possibly contains bugs
has_many :leases do def payments_for(start_on, end_on) select_value("SELECT SUM(payments.amount) FROM payments INNER JOIN leases ON leases.id = payments.lease_id WHERE #{proxy_owner.class.send(:sanitize_sql, ['payments.paid_on BETWEEN ? AND ? AND leases.some_parent_id = ?', start_on, end_on, proxy_owner.id])}") end end
Actually, I realize that I'm thinking of 'more performant' rather than 'cleaner' by shifting some work to the database. Since I don't know where the #within method comes from (named_scope perhaps?), I really can't say too much. Your solution is actually quite clean. What prompted you to ask the question?
-Rob
Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com
I was reading about symbol to proc and thought there might be a use here... Yes, within() is a named_scope.
Thanks!