您如何配置 ransack 以默认去除前导和尾随空格?

How do you configure ransack to strip leading and trailing whitespace as a default?

我在使用 ruby 搜索 gem (https://github.com/activerecord-hackery/ransack) 的 Web 应用程序中有多个搜索栏(超过 20 个)。

有谁知道如何去除所有(20 多个)搜索的前导和尾随空格?

我目前的解决方案是在应用程序助手中创建以下方法:

def strip_query
  params[:q] = Hash[params[:q].map { |key, str| [key, str.strip] }] unless params[:q].blank?
end

并在每个控制器的开头调用方法:

 include ApplicationHelper
 before_action :strip_query, only: :index

我正在寻找一种不在所有 20 多个控制器中重复代码的 DRY 方法。

https://github.com/activerecord-hackery/ransack/issues/332

建议可以在 config/initializers/ransack.rb 文件中创建新谓词,但这需要更改每个视图中的搜索以引用新谓词。

针对我的问题定制它的最佳方法是什么?是否可以配置 ransack 以去除空格作为所有搜索查询的默认值?

我会在 application_controller.rb

中添加这样的方法
def query_params
  query = params[:q] || {}
  Hash[query.map { |key, value| [key, value.strip] }]
end

然后将控制器中的调用从 Foo.ransack(params[:q]) 更改为:

Foo.ransack(query_params)