Thx, Colin. I didnt see your reply, but I got a very similar answer
today on StackOverflow:

http://stackoverflow.com/questions/2187430/how-to-define-a-named-scope-to-roll-up-a-has-many-with-nested-models/2187447#2187447

Basically, it looks like this:

class Forum < ActiveRecord::Base
  has_many :topics, :dependent => :destroy, :order => 'created_at
desc'
  named_scope :user_posted, lambda {|user|
    { :joins => "JOIN topics t ON t.forum_id = forums.id " +
        "JOIN comments c ON c.topic_id = t.id " +
        "JOIN replies r ON r.comment_id = c.id",
      :conditions => ["t.user_id = ? OR c.user_id = ? OR r.user_id
= ?",
        user, user, user],
      :group => "forums.id"
    }
  }
end

On Jan 27, 12:52 am, Colin Law <[email protected]> wrote:
> 2010/1/27lunaclaire<[email protected]>:
>
>
>
> > First the data model:
>
> > class Forum < ActiveRecord::Base
> >        has_many                :topics, :dependent => :destroy, :order => 
> > 'created_at
> > desc'
> > end
>
> > class User < ActiveRecord::Base
> >        has_many                :topics, :dependent => :destroy
> >        has_many                :comments, :dependent => :destroy
> >        has_many                :replies, :dependent => :destroy
> > end
>
> > class Topic < ActiveRecord::Base
> >        belongs_to              :forum
> >        belongs_to      :user
> >        has_many                :comments, :dependent => :destroy
> > end
>
> > class Comment < ActiveRecord::Base
> >        belongs_to      :user
> >        belongs_to              :topic
> >        has_many                :replies, :dependent => :destroy
> > end
>
> > class Reply < ActiveRecord::Base
> >        belongs_to              :user
> >        belongs_to      :comment
> > end
>
> > So Users can post Topics to Forums. They can also post Comments to the
> > Topics in a Forum. And they can post Replies to the Comments.
>
> > I want to be able to get a list of Forums they've participated in by
> > posting either Topics or Comments or Replies.
>
> I am not sure if this will work but could you provide a named_scope on
> Forum that takes a user id as a parameter, :include topic, user,
> comment and reply, and specify the condition that
> forum.topic.user.id=user_id OR forum.topic.comment.user.id = user_id
> OR forum.topic.reply.user.id=user_id.
>
> I am not sure if the include user will include comment.user and
> reply.user, I am working out of my comfort zone here.  If there is not
> a rails way to do it then you could always just write the above as SQL
> though I always try and avoid this.
>
> Colin

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to