记录:后台显示当前浏览人数

Devise有一个last_sign_in_at的方法先确定用户的最后登录时间,可以用这个数值来筛选当前用户的数量,我们这个功能就是基于这个实现的,在用户的时候就设定last_sign_in_at的值。此代码放在application_controller里面。 before_action :set_last_seen_at, if: proc { user_signed_in? && (session[:last_sign_in_at] == nil || session[:last_sign_in_at] < 15.minutes.ago) }

private
  def set_last_seen_at
    current_user.update_attribute(:last_sign_in_at, Time.now)
    session[:last_sign_in_at] = Time.now
  end

需要在models/user.rb里面定义一个查询方法:

  def self.online_now
    where("last_sign_in_at > ?", 15.minutes.ago)
  end

编写ajax调用的后端方法:

    def online_now
        @online_users = User.online_now
        @count = @online_users.count
        # count = params['online_users']['count']
        respond_to do |format|
            format.json { render json: @count }
        end
         # puts @count
     end

编写前端的ajax代码:

function update() {
          $.ajax({
              type:"GET",
              url:"<%= online_now_admin_users_path %>",
              dataType:"json",
              data: "@count",
              success:function(result){
                // alert(result);
              $('#online_users').html(result + "名");
              }
              })
        };
        setInterval(update, 5000); //5秒钟执行一次
        update();
<div class="count">当前在线人数:<span id="online_users">
</span>
</div>

last_sgin_in