显示是否有人正在阅读帖子

时间:2013-04-05 09:22:51

标签: ruby-on-rails session cookies

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

我感谢任何建议。谢谢!

2 个答案:

答案 0 :(得分:2)

通常,使用超时系统。

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

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

优点:

  • 您可以在需要时(使用cron,每天或其他内容)删除已完成的日期,只需一个查询,而不是每个视图一个。
  • 解决了关闭浏览器的用户(没有打开下一页时)的问题。

答案 1 :(得分:2)

更准确

在routes.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