首页 > 解决方案 > 如何从链接到传递的参数中过滤特定的参数键?

问题描述

我有一个索引,用户可以通过复选框应用许多不同类型的过滤器。

每个过滤器都有一个“X”按钮来关闭过滤器,它基本上向当前link_to的同一索引页面发出请求,但被关闭的过滤器的参数键除外。permitparams

例如:

<div class="form-group <%= 'hidden' unless params.dig(:q, "subscription_payment_type_eq").present? %>" id="subscription_payment_type_eq" data-toggle-target="objective">
  <%= f.select :subscription_payment_type_eq, payment_types_selector_for_filter,  { include_blank: "Forma de pago..."}, class: "form-control gray my-2 " %>
  <% if params.dig(:q, "subscription_payment_type_eq").present? %>
    <%= link_to admin_users_path(params: params.permit(q: [:extra_params, :address_province_eq, :subscription_status_eq, :created_at_gteq, :created_at_lteq])) do %>
      <span class="dismiss-box glyphicon glyphicon-remove-circle">
    <% end %>
  <% end %>
</div>
<div class="form-group <%= 'hidden' unless params.dig(:q, "address_province_eq").present? %>" id="address_province_eq" data-toggle-target="objective">
  <%= f.select :address_province_eq, user_provinces_selector_for_filter, { include_blank: "Provincia..."}, class: "form-control gray my-2 " %>
  <% if params.dig(:q, "address_province_eq").present? %>
    <%= link_to admin_users_path(params: params.permit(q: [:extra_params, :subscription_payment_type_eq, :subscription_status_eq, :created_at_gteq, :created_at_lteq])) do %>
      <span class="dismiss-box glyphicon glyphicon-remove-circle">
    <% end %>
  <% end %>
</div>

该方法有效,但是手动将异常参数键添加到添加到索引页面的每个新过滤器非常麻烦。

有没有办法传递参数,不包括属于被关闭的过滤器的参数键?

我尝试了以下方法,但没有传递任何参数:

  <% if params.dig(:q, "subscription_payment_type_eq").present? %>
    <%= link_to admin_users_path(params: params[:q].except(:subscription_payment_type_eq).permit) do %>
      <span class="dismiss-box glyphicon glyphicon-remove-circle">
    <% end %>
  <% end %>

也试过这个但是got undefined method 'exclude' for #<ActionController::Parameters:0x00007f6331b00dd8>

<%= link_to admin_users_path(params: params.exclude(:subscription_payment_type_eq).permit) do %>

标签: htmlruby-on-railsmodel-view-controllerfiltercontroller

解决方案


Permit 需要一个参数列表,并且由于您没有发送任何参数,因此不会将任何参数传递给您的控制器。我实际上不确定您没有 args 的呼叫许可是如何工作的。无论如何,也许你可以这样尝试:

 <%= link_to admin_users_path(params: params[:q].except(:subscription_payment_type_eq.permit!)

推荐阅读