Get categories where forum-user posted in

I'm developing a system similar to the ForumExample (http:// wiki.rubyonrails.org/rails/pages/ForumExample), and stumbled upon the following.

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.

Not tested, not sure if it works, but an idea:

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

#view <% @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   end %>   <%= "#{@user.id} has started #{topics} Topics and #{posts} in Category #{c.name}" %><br />

<% end %>

not sure if i use inject correctly here, just googled this thing :smiley: Hope oyu get the idea. and you should put thta stuff in a helper i guess, to make it less clumpsy.

Eager loading would be the answer: Category.find(:all, :include=>[{:forums=>{:messages=>:author}}], :conditions=>['authors.name= ?', 'Robert']) I'm not sure this needs corrections or not but the trick is that curly braces in :include gives you nested joins.

Charly

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...