我在一个使用ruby的ransack 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+控制器的代码。
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)

10-07 19:11
查看更多