Forum: Ruby on Rails Get categories where forum-user posted in

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Robert (Guest)
on 2007-02-08 13:07
(Received via mailing list)
I'm developing a system similar to the ForumExample (http://, and stumbled upon the

Let's say I wanted to get all the categories a certain user posted in.
How do I get that information withouth using a custom query
through :finder_sql (and thus losing the find_in_collection ownage)?
It would also be great to see how many post that author made in a
category while I'm at it.
Thorsten L (Guest)
on 2007-02-08 14:51
(Received via mailing list)
Not tested, not sure if it works, but an idea:

@categories = Category.find :all, :conditions => "(messages.author_id
= 1 AND = 1", :include => { :forums => { :topics =>
replies } }

<% @categories.each do |c|
   posts = 0
   topics = 0
   topics = c.forums.inject do |tsum,topic|
     tsum += 1
       #count and sum up all topics user has created.
     posts += topic.inject do { |psum,post| psum += 1 }
       #count and sum up all posts of the user in each topic
  end %>
  <%= "#{} has started #{topics} Topics and #{posts} in
Category #{}" %><br />

<% end %>

not sure if i use inject correctly here, just googled this thing :D
Hope oyu get the idea.
and you should put thta stuff in a helper i guess, to make it less
Charly (Guest)
on 2007-02-08 15:07
(Received via mailing list)
Eager loading would be the answer:
Category.find(:all, :include=>[{:forums=>{:messages=>:author}}],
:conditions=>[' ?',
I'm not sure this needs corrections or not but the trick is that curly
braces in :include gives you nested joins.

Robert (Guest)
on 2007-02-09 13:37
(Received via mailing list)
The find() works (although I must rather would like to have a thing
like this in the model).

Counting the posts is still a problem. An each() loop isn't that
scalable. Any thoughts on doing a SUM in the SQL query somewhere or
something? I've tried out a couple of things with :select, but it was
just ignored...
This topic is locked and can not be replied to.