2010/1/27 lunaclaire <[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