使用ActiveAdmin在仪表板中自动刷新

时间:2012-06-12 16:21:00

标签: ruby-on-rails activeadmin

我正在开发一个Rails中的应用程序,它充当网络和应用程序监视器。我使用Active Admin Dashboard作为主页,显示我的网络中每个服务器和一些应用程序的状态。我想将仪表板页面配置为每隔x分钟自动刷新一次,但我不知道在何处配置此设置,因为我无法完全控制仪表板呈现的html。有人设法做到了吗?

由于

3 个答案:

答案 0 :(得分:6)

config / initializers / active_admin.rb 中,您可以注册javascripts:

config.register_javascript "/javascripts/admin-auto-refresh.js"

然后创建一个完全相同的admin-auto-refresh.js。

您还需要在config / environments / production.rb中注册admin-auto-refresh.js

config.assets.precompile += "admin-auto-refresh.js"

更新:

在5秒后添加了一些代码来刷新页面。将其添加到/javascripts/admin-auto-refresh.js

$(function() {
  setTimeout(location.reload(true), 5000);
})

答案 1 :(得分:3)

这是最终的代码,非常感谢@JesseWolgamott。

$(function() {
var sPath = window.location.pathname;
    var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
    if (sPage == 'admin'){
        setTimeout("location.reload(true);", 10000);
    }
})

答案 2 :(得分:0)

以下代码将在不闪烁页面的情况下刷新。通过在页面中至少有一个元素标记为needs_updating来启用它。在任何加载的javascript中包含此代码段,然后在页面的任何位置添加标记。

唯一的缺点是这只会更新页面的html主体。

例如

show do |my_model| 
  ...
  if my_model.processing?
    row :status, class: 'needs_updating' do
      'we are working on it...'
    end
  else
    row :status do
      'ready'
    end
  end
  ....
end

因此,如果模型仍处理,那么您将获得类标记' needs_updating'这会导致下面的javascript每10秒调用一次

  jQuery(document).ready(function($) {
    if ($('.needs_updating').length > 0) {
      console.log("we need some updating soon");
      var timer = setTimeout(function () {
        console.log("re-loading now");
        $.ajax({
          url: "",
          context: document.body,
          success: function(s,x) {
              $(this).html(s);
              if ($('.needs_updating').length == 0) {
                clearInterval(timer);
              }
          }
        });
      }, 10000)
    }
  })