如何配置ransack以删除前导和尾随空格作为默认值?

时间:2016-12-01 12:08:38

标签: ruby-on-rails ruby activerecord rubygems ransack

我在一个使用ruby的搜索宝石(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配置为剥离空格作为所有搜索查询的默认值?

1 个答案:

答案 0 :(得分:1)

我会在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)