Frank Kim
2008-Apr-04 19:45 UTC
how do you model an article that has an author and readers w/ the same User model?
Hi, I am stuck trying to figure out how to model this. I have a user model and an article model. It is easy enough to say the user has many articles and the article has one user. class User < ActiveRecord::Base has_many :articles end class Article < ActiveRecord::Base belongs_to :user end But how do I add the concept of an article having many readers? The readers would be using the same User model since a User can author many articles but can also be reading many other articles. Your help would be most appreciated. Thanks, Frank --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
clouder
2008-Apr-04 21:56 UTC
Re: how do you model an article that has an author and readers w/ the same User model?
Well I''m certain this isn''t a working answer, I thought I''d post anyways in hopes that maybe something I say here will jump start your brain, and ultimately lead you to the solution. None of this code was tested. #This one just uses habtm to make a join table for readers/reads class User < ActiveRecord::Base has_many :articles has_and_belongs_to_many :reads, :class_name => ''Article'' end class Article < ActiveRecord::Base belongs_to :user has_and_belongs_to_many :readers, :class_name => ''User'' end ------------- # This one makes the join table explicitly and tries to use some fancy has_many options. # The :source-''s might be flipped, I''m not sure how those work exactly. Again this code # isn''t tested, I just read through http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html # and came up with the best thing I could. class User < ActiveRecord::Base has_many :articles has_many :readings, :through => :reads, :source => :user end # Read as in ''that was a good read(noun)'', NOT ''he read(verb) well''. Helps me to wrap my head around it better. class Read < ActiveRecord::Base belongs_to :user belongs_to :article end class Article < ActiveRecord::Base belongs_to :user has_many :readers, :through => :reads, :source => :article end Again I can''t stress enough that I do not know at all if this will work, so if your messing with it and you don''t possibly see how it could work, it probably doesn''t. Move on an find an answer from someone more experienced (I have less than 6 months exp. in Rails/ Ruby, and use it much more as a hobby, and not a profession). On Apr 4, 1:45 pm, "Frank Kim" <railso...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi, > > I am stuck trying to figure out how to model this. > > I have a user model and an article model. > > It is easy enough to say the user has many articles and the article > has one user. > > class User < ActiveRecord::Base > has_many :articles > end > > class Article < ActiveRecord::Base > belongs_to :user > end > > But how do I add the concept of an article having many readers? The > readers would be using the same User model since a User can author > many articles but can also be reading many other articles. > > Your help would be most appreciated. > > Thanks, > Frank--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
AndyV
2008-Apr-05 16:51 UTC
Re: how do you model an article that has an author and readers w/ the same User model?
I''d suggest a join class called ''Subscription'' that belongs_to :user and :article. With that you could also add some helpful attributes to the join (e.g., ''can_reply'', or ''last_read_at''). If you add that then User has_many :articles has_many :subscriptions has_many :articles_to_read, :class_name=>''Articles'', :through=>subscriptions end Article belongs_to :user has_many :subscriptions has_many :readers, :class_name=>''User'', :through=>:subscriptions end On Apr 4, 3:45 pm, "Frank Kim" <railso...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi, > > I am stuck trying to figure out how to model this. > > I have a user model and an article model. > > It is easy enough to say the user has many articles and the article > has one user. > > class User < ActiveRecord::Base > has_many :articles > end > > class Article < ActiveRecord::Base > belongs_to :user > end > > But how do I add the concept of an article having many readers? The > readers would be using the same User model since a User can author > many articles but can also be reading many other articles. > > Your help would be most appreciated. > > Thanks, > Frank--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---