activerecord and counting

hello all,

so i have the following situation

company has_many products
products has many parts

i can do company.products .count and get back the product count

what i'd like to know is if there is a more elegant way to get the
number of parts for a given company outside of iterating through each
product, counting its parts and then summing that number.

the solution i have now works. i was just wondering if there was a more
elegant way of going about it.

thanks,

binh

Here's one way to do it:

   Part.count :conditions => ['product_id in (select id from products
where company_id = ?)', company_id]

Binh Ly wrote:

hello all,

so i have the following situation

company has_many products
products has many parts

i can do company.products .count and get back the product count

what i'd like to know is if there is a more elegant way to get the
number of parts for a given company outside of iterating through each
product, counting its parts and then summing that number.

the solution i have now works. i was just wondering if there was a more
elegant way of going about it.

thanks,

binh

Within rails? probably not.

You could, however, create a view in the target database and then use
that to return the desired values. I

Or, if this type of reporting is a frequent requirement, and the the
parts per product is usually stable, then it might be worth while to
have a regularly scheduled or dynamically calculated roll-up of the part
count into a field in the product table and then report on that.

wouldn't the counter_cache improve your performance?
http://railscasts.com/episodes/23

at least for having only to read the parts_count from the product
where company_id = ?

select parts_count from prodcuts where company_id = ?

and after that sum them up :wink:

should be one statement and an sum up. optimization possible.

that's how i would try to do it :wink:

so i have the following situation

company has_many products
products has many parts

i can do company.products .count and get back the product count

what i'd like to know is if there is a more elegant way to get the
number of parts for a given company outside of iterating through each
product, counting its parts and then summing that number.

Give Company a has_many :through relation to Part, and then you'll be
able to do company.parts.count.

///ark