Best way to handle user's topic views in a forum



I’m french… hope you will understand my English ^^

So I’m building a forum for my website from scratch. None of the
already built forum like Beast or RForum suits my needs, and it’ll
take as much time to integrate them as to create a new one.

I would like your opinion on how to handle the user’s topic views.
The best behavior would be that every unread topic stays in this state
as long as the user doesn’t read it, and everytime a new post is
created the topic is marked unread for that specific user. But I think
it’ll take to much resources to do that.
So I’m thinking to do it the “punbb” way (not really sure but I
remember it that way) : when a user goes back to the forum, every
topic updated since its last visit is marked unread, until the user
reads it. The only thing I don’t like with this approach is that I
need to update an “last_visit_at” attribute on my users every time
they request a page on the forum.
So how would you do it ?

My structure looks like this :

  1. class Forum < ActiveRecord::Base
  2. has_many :forum_topics
  3. has_many :forum_posts
  4. end
  5. class ForumTopic < ActiveRecord::Base
  6. belongs_to :user
  7. belongs_to :forum
  8. has_many :forum_posts
  9. end
  10. class ForumPost < ActiveRecord::Base
  11. belongs_to :user
  12. belongs_to :forum
  13. belongs_to :forum_topic
  14. end




take a look at Forulio - Ruby on Rails based forum.
How we did this there.

There is model:

class ReadTopic < ActiveRecord::Base
belongs_to :user
belongs_to :topic
belongs_to :forum

this model store last read post in topic. So when you open topic but did
not look at last post it still stays unread.

You can look live how it works at

and browse code: