如何在链接中传递搜索参数进行打印

时间:2017-04-01 14:13:53

标签: ruby-on-rails ruby-on-rails-5

如何传递链接中的搜索参数进行打印。

我有一个方法#index控制器#TicketsController

def index
  @search = current_account.searches.find_by(id: params[:search_id])

  @q = policy_scope(Ticket).ransack(params[:q])

  if params[:q].blank? && params[:advanced_search].blank? || params[:q]&.to_unsafe_h&.length == 1 && params[:q][:s].present?
    @q.add_default_condition('status', 'in', 'open')
    session[:last_ticket_search] = nil
  else
    session[:last_ticket_search] = {q: params[:q]}
    if params[:advanced_search].present?
      session[:last_ticket_search].merge!(advanced_search: 't', selected_columns: params[:selected_columns])
      session[:last_ticket_search].merge!(params[:search_id].present? ? {search_id: params[:search_id]} : {commit: 'Apply'})
    end
  end

  @selected_columns = selected_columns
  @tickets = @q.result.select('tickets.*')
                      .includes(:account, :ticket_responses, :assignee, :tags)
                      .order('tickets.created_at DESC')
                      .paginate(page: params[:page], per_page: per_page('tickets'))
end

我需要制作一个打印所有对象的页面。 为此,我在`tickets / index.html.erb

中建立了链接Print
<a class="btn btn-primary print-button" href="<%= tickets_path(variant: :print) %>" target="_blank" title="Print ticket" data-tooltip data-placement="bottom">
  <i class="fa fa-print"></i>
</a>

关键是,如果你点击它会在这里打开整个对象列表,一切都很好。但是如果我使用search,我将生成所有对象的列表。我需要一个我在搜索中定义的对象列表。那么如何在控制器中传递搜索参数以生成打印页面?

我试过了。

<%= tickets_path(q: params[:q], advanced_search: params[:advanced_search], variant: :print) %>

但控制器不共享参数并接受字符串。

需要:"utf8"=>"✓", "q"=><ActionController::Parameters {"assignee_id_eq"=>"", "status_in"=>"closed", "ticket_type_eq"=>"", "simple_search"=>""}

我得到:{"q"=>"assignee_id_eq=&simple_search=&status_in=closed&ticket_type_eq=", "variant"=>"print", "controller"=>"tickets", "action"=>"index"}

1 个答案:

答案 0 :(得分:0)

只需创建一个实例变量,并将所需参数解析为一个哈希值,该哈希值将在视图中提供:

def new
  @search_params = Rack::Utils.parse_nested_query params[:q]
  ...
end

并在视图中:

<%= tickets_path(q: @search_params[:q], advanced_search: params[:advanced_search], variant: :print) %>