0

我正在使用 meta_search gem。对于带有搜索参数的管理项目索引页面,我有这样的 url。

admin/projects?utf8=✓&search%5Bid_equals%5D=&search%5Btitle_contains%5D=&search%5Bstage_in%5D=completed

然后用户选择一个项目,网址将是这个

admin/projects/a--15/edit?page=1 

当用户更新此表单时,搜索参数将丢失。

我怎样才能保留这些参数。我的意思是 session 或 meta_search 有一些方法来解决这个问题?

4

1 回答 1

0

首先,为每个可能想要访问搜索参数的操作创建一个过滤器:

ProjectsController < ApplicationController
  before_filter :save_searches 

  def save_searches
    @addons = ''
    [:page, :id_equals,:title_contains,:stage_in].each do |k|
      if params[k]
        pval = params[k].is_a?(Array) ? params[k].join(',') : params[k]
        @addons << k.to_s + "=" + pval + "&" 
      end
    end
    @addons.chop!
  end

现在,当你的动作触发时,@addons 将被设置,然后你可以这样做:

<%= link_to 'Edit' , edit_path(@project.id) + @addons.length > 0 ? "?" + @addons : '' %>

就是说,我敢打赌这在某种程度上是一种黑客行为,并且有一种更清洁的方法可以做到这一点。但这对我有用。

:page 键使得如果您运行分页并使用 :page 参数跟踪当前页面,您的分页也应该被记住。

另请注意,如果您在参数中获得一个数组(即使用 :multiple=>true 进行选择的结果),则会处理此问题。

于 2013-01-04T01:28:45.237 回答