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]

wouldn’t the counter_cache improve your performance?

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:

On Jan 11, 9:45 pm, James B. [email protected]

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.

On Jan 11, 12:34 pm, Binh Ly [email protected] wrote:

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