2016-12-01 9 views
2

ルビーの豪華な宝石(https://github.com/activerecord-hackery/ransack)を使用しているWebアプリケーションで、複数の検索バー(20以上)があります。ransackを設定して、先頭と末尾の空白をデフォルトとして取り除きますか?

すべての(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 

私はDRY方法を探していますそれはすべての20 +コントローラでコードを繰り返さない。

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

config/initializers/ransack.rbファイルに新しい述語を作成することが可能と示唆しているが、これは新しい述語を参照するために、各ビューで検索を変更することが必要となります。

私の問題のためにこれをカスタマイズする最良の方法は何ですか?すべての検索クエリのデフォルトとしてホワイトスペースを取り除くようにransackを設定することは可能ですか?

答えて

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) 
+0

、私は束をしようとしていました異なるものの最後に、あなたの提案は最もクリーンな実装でした。ありがとう! –

関連する問題