I want to have a sum of an order by doing something like: select sum(items.price) from order, items where order.item_id = items.id Since Order and Item class are related (using "belongs_to"), I thought I could use: Order.sum('items.price') But that doesn't work as expected... I have to use: Order.sum('items.price', :joins => 'left outer join items on items.id=item_id') Isn't ActiveRecord::Calculations supposed to know that I'm asking for a join? Why am I supposed to write it?
on 2007-01-30 18:57
on 2007-01-30 19:11
> Isn't ActiveRecord::Calculations supposed to know that I'm asking for > a join? Why am I supposed to write it? sum() wont automatically make the joins for you - it only pulls that data when it's needed. If you want a sum of all item prices, you do: Item.sum('price') If you want a sum of the prices of items within a specific order, you do: order = Order.find(1234) order.items.sum('price') You should also be able to do: Order.sum('items.price', :include => 'items') Hope that helps, Steve
on 2007-09-25 23:10
> You should also be able to do: > Order.sum('items.price', :include => 'items') That's the stuff! Great! Thank you! But "include" it's not described in the docs for "calculate", only for "count"! I think it should be added to the docs... http://api.rubyonrails.org/classes/ActiveRecord/Ca... ClassMethods.html#M000953