# Get categories where forum-user posted in

**URL:** <https://www.ruby-forum.com/t/get-categories-where-forum-user-posted-in/84884>\
**Category:** Rails\
**Created:** [February 8, 2007, 12:07pm UTC](https://www.ruby-forum.com/t/get-categories-where-forum-user-posted-in/84884 "2007-02-08T12:07:59Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![robert](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e95f7d/32.png) [@robert](https://www.ruby-forum.com/u/robert)\
**Post date:** [February 8, 2007, 12:07pm UTC](https://www.ruby-forum.com/t/get-categories-where-forum-user-posted-in/84884/1 "2007-02-08T12:07:59Z")

</div>

I’m developing a system similar to the ForumExample (http://  
[wiki.rubyonrails.org/rails/pages/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.

---

<div class="post-metadata">

**Author:** ![robert](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e95f7d/32.png) [@robert](https://www.ruby-forum.com/u/robert)\
**Post date:** [February 8, 2007, 1:51pm UTC](https://www.ruby-forum.com/t/get-categories-where-forum-user-posted-in/84884/2 "2007-02-08T13:51:13Z")

</div>

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}” %\>

\<% end %\>

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

---

<div class="post-metadata">

**Author:** ![robert](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e95f7d/32.png) [@robert](https://www.ruby-forum.com/u/robert)\
**Post date:** [February 8, 2007, 2:07pm UTC](https://www.ruby-forum.com/t/get-categories-where-forum-user-posted-in/84884/3 "2007-02-08T14:07:14Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![robert](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e95f7d/32.png) [@robert](https://www.ruby-forum.com/u/robert)\
**Post date:** [February 9, 2007, 12:37pm UTC](https://www.ruby-forum.com/t/get-categories-where-forum-user-posted-in/84884/4 "2007-02-09T12:37:25Z")

</div>

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…
