【问题标题】:Rails Ransack gem: search for multiple values by using only one select optionRails Ransack gem:仅使用一个选择选项搜索多个值
【发布时间】:2019-09-05 15:59:39
【问题描述】:

我使用 ransack gem,我有一个选择字段 status 有多个选项

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

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

如何通过选择选项 failed 和属性 partial 搜索状态属性,以便通过仅搜索 failed 获得 failedpartial 的合并结果。

【问题讨论】:

  • 你是说当用户选择failed时,你想同时搜索状态failedpartial,但是对于其他状态正常工作?
  • 是的,完全正确。也许有一种简单的洗劫方法可以做到这一点?
  • 不是真的,我认为您需要在状态失败时更新您的 ransack 参数。
  • 有没有办法将查询与 OR 连接起来,以便可以搜索“失败或部分的状态”?

标签: ruby-on-rails ransack


【解决方案1】:

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

  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

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多