0

我想显示正在阅读帖子的人的列表。在尝试实现该功能之前,我想征求一些建议。我将首先检查在;中调用该show操作的用户。PostsController每当一个人查看一个帖子时,他都会被记录到正在阅读该帖子的人列表中。但是,当他离开阅读帖子时,我不确定如何从列表中删除该人。有没有办法使用或注意用户是否离开某个页面?一点帮助将帮助我立即开始!cookiessessions

我很感激任何建议。谢谢!

4

2 回答 2

2

通常使用超时系统。

我们可以存储用户阅读帖子的日期,而不是存储布尔值“正在阅读帖子”。

不,您可以轻松设置超时(例如 5 分钟)以了解谁在阅读帖子。这是一个近似值,但这几乎是现实的。

好处 :

  • 您可以根据需要删除完成的日期(使用 cron、每天或其他内容),使用单个查询而不是每个视图一个查询。
  • 您解决了关闭其浏览器的用户的问题(当没有打开下一页时)
于 2013-04-05T09:28:23.770 回答
2

为了更准确

在路线.rb

post "/posts/:id/being_read" => "posts#being_read", :defaults => { :format => "json"}

在控制器中

PostsController < ApplicationController
  def being_read
    current_user && @post.being_read_by current_user
    head :ok
  end
end

在展示页面上

function beingRead(){
  $.post("/posts/<%=@post.id%>/being_read", function(data) {
    setTimeout(beingRead,10000);
  });
}

在 post.rb 中

def being_read_by user=nil
  # making use of rails low level cache

  readers_ids = Rails.cache.fetch("Post #{id} being read", :expires_in => 5.minutes) || []

  readers_ids = Rails.cache.fetch("Post #{id} being read", :expires_in => 5.minutes) (readers_ids << user.id) if user

  readers_ids
end
于 2013-04-05T09:38:09.550 回答