首页 > 解决方案 > Rails Ransack gem:仅使用一个选择选项搜索多个值

问题描述

我使用 ransack gem,我有一个带有多个选项的选择字段状态

status_collection = %w(failed partial successful)
<%= search_form_for @q, :url => validation_path(:anchor => 'list'), :class => 'form-horizontal' do |f| %>
  <%= f.select :status_eq, options_for_select(Validation.status_collection, @status_eq_selection), {}, {:class => 'form-control'} %>
<% end %>

在我的控制器中:

def show
    @q = Validation.where(report_id: params[:id]).search(params[:q])
   @validations = @q.result(distinct: true)
end

我想将选项合并到failed一个partial选择选项failed中,这样如果我搜索failedthen ransack 也应该搜索partial并合并两个搜索结果。

如何通过选择选项failed和属性来搜索状态属性,partial以便我获得合并结果,failed并且partial只搜索failed.

标签: ruby-on-railsransack

解决方案


根据我们在评论中的讨论,我们可以这样做(未经测试):

  before_action :adjust_ransack_params, only: [:show]

  private

  def adjust_ransack_params
    # Only change it if the status_eq is failed
    if params.dig(:q, :status_eq) == 'failed'
      params[:q].delete(:status_eq)
      params[:q][:status_in] = %w(failed partial)
    end
  end

推荐阅读