如何将 activeadmin 查询字符串传递给 batch_action?

How do I pass the activeadmin query string to a batch_action?

我正在使用 ActiveAdmin 构建管理员 UI。

我正在创建一个 batch_action,它获取过滤后的 ID 列表并将它们存储为一个段。除了段的名称外,我还想存储创建该段的 activeadmin 查询字符串。

当前页面的查询字符串似乎没有通过 batch_action post 传入,所以看来我必须添加一些 Javascript 来获取并传递它一起

我想知道是否有我忽略的解决方案,或者是否有其他人解决了这个问题?

这是我今天下午想到的解决方案。

我添加了文件 /assets/javascripts/active_admin/query_string.js,其中包含从当前页面中提取查询字符串的代码。

我正在对其进行解码,但这仅取决于你想用它做什么:

(function (w, d, $, undefined) {
  'use strict';

  var admin_query_string = function() {
    var href = window.location.href,
      tokens = href.split('?'),
      qs = '';

    if (tokens.length > 1) {
      qs = decodeURIComponent(tokens[1]);
    }

    return qs;
  };

  w.admin_query_string = admin_query_string;
}(window, document, jQuery));

然后我添加了文件/assets/javascripts/active_admin/testers.js。 Tester 是我们应用程序中的一个模型。

active_admin Tester 资源有一个 batch_action :create_segment,它接受一个 :name、:query 和 :ids 列表并创建一个 testers 段。

如果当前页面是 active_admin 个测试页面,javascript 仅 运行:

(function () {
  'use strict';

  $(function() {
    if ($('body.admin_testers').length) {
      $("a.batch_action[data-action='create_segment']").on('click', function() {
        $("input[name='query']").val(mycrowd_admin_query_string());
      });
    }
  });
}).call(this);