跟踪数据库中的“新”项目(帖子,评论,电子邮件......) - Ruby on Rails

时间:2009-08-03 11:48:33

标签: ruby-on-rails

我的应用程序包含新闻,帖子,评论和其他各种常见内容。我希望能够跟踪用户观看的内容,以便他们可以通过“4个新帖子”和那种类型的东西来迎接。

目前,我只是用以下内容报告“新帖子”的数量:

Post.find(:all, :conditions => [ "updated_at > ?", session[:user_last_login]]).length

显然,这只是部分一样好。

在我把我的整个应用程序搞得一团糟之前,有什么最简单的方法可以实现我所描述的内容,并且rails有什么功能可以帮助我吗?

此外,这种功能是否有一个共同的名称可能有助于我的Google搜索?

感谢。

5 个答案:

答案 0 :(得分:2)

一种相当典型的方法是跟踪用户上次查看特定对象(或对象集合)的时间。然后,如果您想要跟踪查看的对象上有created_atupdated_at,则可以计算自上次用户查看新闻以来更改的帖子数量项目

所以,你可能会有一个类:

class NewsItemTrack < ActiveRecord::Base

  belongs_to :news_item
  belongs_to :user

  def self.track(news_item_id, user_id)
    nt = self.find_by_news_item_id_and_user_id(news_item_id, user_id)
    if nt.nil?
      nt = self.create(:news_item_id => news_item_id, :user_id => user_id, :last_viewed_at => Time.now)
    else
      nt.update_attribute(:last_viewed_at, Time.now)    
    end
  end

  def new_comment_count
    Comment.count(:all, :conditions => ['news_item_id = ? and created_at > ?', self.news_item_id, self.last_viewed_at]
  end
end

NewsItemTrack.track将记录用户查看相关新闻的事实。然后,当你想知道你要做的新闻项目有多少新评论时:

NewsItemTrack.find_by_news_item_id_and_user_id(123, 456).new_comment_count

答案 1 :(得分:1)

我会使用具有多态关系的连接表 - 使用插件(gem?)has_many_polymorphs。

您可以拥有一个名为“查看”的关联表和关联的模型“查看”。 h_m_p将为您提供诸如'seen_posts','Viewed_comments','Viewed_news'等方法(新闻是一个糟糕的模型名称,它应该是一个像NewsItem这样的单词,名为news_items,或类似的东西)。

主页的google has_many_polymorphs,有例子和东西。

答案 2 :(得分:1)

您可以查看Michael Bleigh的ActsAsReadable

答案 3 :(得分:0)

您需要跟踪用户查看了哪些帖子。如果用户必须按顺序查看帖子,您可以简单地跟踪最后看到的帖子。如果可以不按顺序查看它们,那么您需要保持一个关系,指示用户是否看过某个帖子。要获取“新”帖子,您可以选择当前用户在该表中没有匹配关系的帖子。显然,每当用户查看帖子时,您需要更新用于跟踪用户观看历史记录的列或关系。

答案 4 :(得分:0)

正是tvanfosson所说的。因为,当用户登录但查看未读消息时,您的示例将失败。

将帖子的默认值设置为new,并在第一次渲染时将其设置为viewed。在Ruby on Rails中,第一个渲染通常是show动作。