Count by group optimization

Hello RoR people,

First time here.

I have a question about calculations in rails.

For example i have two tables:

categories
id
name

and questions:
id
category_id
name

How I can count questions in each category?

Please don’t give me recepies like: :include => [:questions] or
something like: @categories.each { |c| c.questions.count } Because
those methods is not so much optimized, to run them on a production
server.

Thank you,
Dmitry for Estonia.

Solid wrote:

Please don’t give me recepies like:

My company uses “recepies” like that on production servers. Could you
be more specific? Which methods are you against using and why? Would
you prefer writing your own SQL queries? Have you looked at the
find_by_sql and count_by_sql methods?

Solid wrote:

Hello RoR people,

First time here.

I have a question about calculations in rails.

For example i have two tables:

categories
id
name

and questions:
id
category_id
name

How I can count questions in each category?

Please don’t give me recepies like: :include => [:questions] or
something like: @categories.each { |c| c.questions.count } Because
those methods is not so much optimized, to run them on a production
server.

@category.questions.size

From the API docs:
Returns the size of the collection by executing a SELECT COUNT(*) query
if the collection hasn’t been loaded and calling collection.size if it
has. If it’s more likely than not that the collection does have a size
larger than zero and you need to fetch that collection afterwards, it’ll
take one less SELECT query if you use length.


Josh S.
http://blog.hasmanythrough.com