Ruby on rails 后端使用ajax检测用户是否不再处于活动状态

Ruby on rails 后端使用ajax检测用户是否不再处于活动状态,ruby-on-rails,Ruby On Rails,我正在尝试创建一个以设置的间隔运行的心跳,以确保用户仍在页面上。我已经做到了: (function worker() { $.ajax({ type: 'POST', url: '/users/' + <%= current_user.id %> + '/heartbeat', success: function(data) { console.log('updated') }, complete: function() {

我正在尝试创建一个以设置的间隔运行的心跳,以确保用户仍在页面上。我已经做到了:

(function worker() {
  $.ajax({
    type: 'POST',
    url: '/users/' + <%= current_user.id %> + '/heartbeat', 
    success: function(data) {
      console.log('updated')
    },
    complete: function() {
      setTimeout(worker, 5000);
    }
  });
})();
(函数工作者(){
$.ajax({
键入:“POST”,
url:'/users/'++'/heartbeat',
成功:功能(数据){
console.log('updated')
},
完成:函数(){
setTimeout(工人,5000);
}
});
})();
现在我想在后端做的是将状态更改为
current\u user.inactive如果它在30秒内没有收到更新。我假设你们中的很多人都在一个应用程序中做过类似的事情,我想知道最好的方法是什么


是否让它更新数据库中的一列,并让后台作业不断运行?或者有更有效的方法吗?

我会将该功能放在我的“检查会话”过滤器中。也就是说,无论何时处理请求,除了确保用户已登录等之外,还应检查其会话是否超时

编辑:示例伪代码

class ApplicationController < ActionController::Base        
  before_filter do
     session = ...   # an ActiveModel instance 
     raise "Timeout" if session.last_action < 60.minutes.ago
     session.last_action = Time.now
     session.save!
  end
end
class ApplicationController
然后,其他控制器照常从ApplicationController继承

顺便说一句,你可能不想让心跳在用户身上,而是在他的会话上,对吗?如果您确定要在用户身上使用它,那么当然可以将伪代码中的
会话
替换为
用户


细化留给您,即您可能不想在
登录控制器上设置超时

这里有示例代码吗?看看是否适合我的情况。在我的情况下,用户可以在网站上生活,并等待分配(actioncable),因此如果用户离开网站,我希望该用户处于非活动状态。