Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在ActiveAdmin中单击“清除过滤器”后保留参数_Ruby On Rails_Ruby On Rails 3_Activeadmin - Fatal编程技术网

Ruby on rails 如何在ActiveAdmin中单击“清除过滤器”后保留参数

Ruby on rails 如何在ActiveAdmin中单击“清除过滤器”后保留参数,ruby-on-rails,ruby-on-rails-3,activeadmin,Ruby On Rails,Ruby On Rails 3,Activeadmin,我有一个类似黑客的设置,我在一个公司列表上显示一些信息,然后单击其中一个公司名称显示为该公司生成的所有潜在客户的列表。我通过将公司id传递给params来实现这一点。这很好用,我可以搜索并过滤到我心中的内容,直到我单击“清除过滤器”,它会去除所有内容,包括公司id。结果是一个Oops页面,因为系统没有公司id用于生成潜在客户列表 我在该页的控制器中尝试了类似的操作 after filter: company_id, :only => :index def franchise_id p

我有一个类似黑客的设置,我在一个公司列表上显示一些信息,然后单击其中一个公司名称显示为该公司生成的所有潜在客户的列表。我通过将公司id传递给params来实现这一点。这很好用,我可以搜索并过滤到我心中的内容,直到我单击“清除过滤器”,它会去除所有内容,包括公司id。结果是一个Oops页面,因为系统没有公司id用于生成潜在客户列表

我在该页的控制器中尝试了类似的操作

after filter: company_id, :only => :index

def franchise_id
  params.merge({:franchise_id => params[:franchise_id]})
end
但这只会在我过滤某些内容之后,而不是在单击“清除过滤器”之后,将ID重新注入

是否有方法仅覆盖此页面的“清除筛选器”行为并强制其保存公司id?

活动管理员:

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

$ ->
  $('.clear_filters_btn').off('click').click ->
    # your stuff
尽管您可能希望在Github上创建一个票证,以便我们可以讨论更改按钮行为的优点

更新1 我编写了一些代码,有选择地删除活动管理员的参数,保留您的参数:

$ ->
  $('.clear_filters_btn').click ->
    location.search = location.search.split('&').filter(
      (s)-> not s.match(/^(q\[|page|commit|order)/)
    ).join '&'
把它放在
active_admin.js.coffee
中,你会很好

更新2 如果您想在Active Admin中将JS应用于特定页面,您可以在页面加载时检查应用于HTML
标记的CSS类,以判断它是否是您想要的。值得注意的是,AA添加当前控制器谓词(索引、show等)和所涉资源的实际名称。要仅将此代码应用于公司的索引页,请执行以下操作:

$ ->
  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 '&'
活动管理员:

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

$ ->
  $('.clear_filters_btn').off('click').click ->
    # your stuff
尽管您可能希望在Github上创建一个票证,以便我们可以讨论更改按钮行为的优点

更新1 我编写了一些代码,有选择地删除活动管理员的参数,保留您的参数:

$ ->
  $('.clear_filters_btn').click ->
    location.search = location.search.split('&').filter(
      (s)-> not s.match(/^(q\[|page|commit|order)/)
    ).join '&'
把它放在
active_admin.js.coffee
中,你会很好

更新2 如果您想在Active Admin中将JS应用于特定页面,您可以在页面加载时检查应用于HTML
标记的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 '&'

以前的解决方案对我不起作用,因此,如果有人仍在努力使用clear_filters_btn:

下面是我如何让它工作的:

将此添加到active_admin.js
$(函数(){
$(文档).off('单击','清除过滤器');
$('.clear_filters_btn').attr('href','?commit=clear_filters');

})
以前的解决方案对我不起作用,因此,如果有人仍在使用clear\u filters\u btn:

下面是我如何让它工作的:

将此添加到active_admin.js
$(函数(){
$(文档).off('单击','清除过滤器');
$('.clear_filters_btn').attr('href','?commit=clear_filters');

})
我希望您能原谅我的无知,但我对很多开发还是相当陌生,对Javascript了解不多。在我正在处理的一个管理页面的上下文中,我将如何覆盖这个问题?@unstablerealtiy我用一个明确的解决方案更新了我的答案,您应该能够复制并粘贴到您的应用程序中。顺便说一句,如果您想参与进来,我为此创建了一张罚单:希望您能原谅我的无知,但我对很多开发还是相当陌生,我对Javascript知之甚少。我将如何在我正在处理的一个管理员页面的上下文中覆盖此问题?@unstablerealtiy我用一个明确的解决方案更新了我的答案,您应该能够将其复制并粘贴到应用程序中。顺便说一句,如果您想参与,我为此创建了一个记录: