我在一个使用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)