单击ActiveAdmin中的清除筛选器后如何保留参数

时间:2013-12-20 17:13:48

标签: ruby-on-rails ruby-on-rails-3 activeadmin

我有一种hackish类型的设置,我在公司列表中显示一些信息,然后单击其中一个公司名称显示为该公司生成的所有潜在客户的列表。我通过将company_id传递给params来实现这一目标。这非常有效,我可以搜索并过滤我的内容,直到我点击“清除过滤器”并删除所有内容,包括company_id。结果是一个Oops页面,因为系统没有用于生成潜在客户列表的company_id。

我在该页面的控制器中尝试过类似的内容

after filter: company_id, :only => :index

def franchise_id
  params.merge({:franchise_id => params[:franchise_id]})
end

但是这只会在我过滤掉某些东西之后重新注入ID,而不是在点击“Clear Filters”之后。

有没有办法覆盖此页面的“清除过滤器”行为并强制它保存company_id?

2 个答案:

答案 0 :(得分:1)

有效管理员currently does this

$ ->
  $('.clear_filters_btn').click ->
    window.location.search = ''

您可以手动删除此点击事件以执行任何操作:

$ ->
  $('.clear_filters_btn').off('click').click ->
    # your stuff

虽然你可能想在Github上创建一张票,所以我们可以讨论改变按钮行为的优点。

更新1

我写了一些代码来有选择地删除Active Admin的params,留下你的代码:

$ ->
  $('.clear_filters_btn').click ->
    location.search = location.search.split('&').filter(
      (s)-> not s.match(/^(q\[|page|commit|order)/)
    ).join '&'

把它放在active_admin.js.coffee中,你会很好。

更新2

如果要将JS应用于Active Admin中的特定页面,可以检查页面加载应用于HTML <body>标记的CSS类,以判断它是否是您想要的。值得注意的是,AA添加了当前控制器动词(索引,显示等)以及相关资源的实际名称。仅将此代码应用于公司的索引页面:

$ ->
  if $('body.index.admin_companies').length
    $('.clear_filters_btn').click ->
      location.search = location.search.split('&').filter(
        (s)-> not s.match(/^(q\[|page|commit|order)/)
      ).join '&'

答案 1 :(得分:0)

以前的解决方案对我不起作用,因此如果有人仍在为clear_filters_btn苦苦挣扎:

这是我的工作方式:

将此添加到active_admin.js

$(function() {
  $(document).off('click', '.clear_filters_btn');
  $('.clear_filters_btn').attr('href', '?commit=clear_filters');
})