Railsで検索機能を公開しようとしています。ユーザーが のような文字列を入力して、名前属性に が含まれ、色属性に が含まname:"john" color:"blue"
れるモデルの ActiveRecord オブジェクトのリストを取得できるようにしたいと考えています。また、andと括弧を使用できるようにしてほしいと思います (例: or ) 。理想的には、年齢が数値フィールドの場合なども使用できます。これを行うレールプラグインはありますか。どちらもこのためのAPIを作成しているように見えるsphinxとferretを簡単に調べましたが、クリアテキストベースのオプションを提供したのか、それとも検索文字列を自分で解析する必要があるのか は不明でした.john
blue
and
or
name:"john" or color:"blue"
(name:"john" color:"blue") or name:"bill"
age<20
2 に答える
ErnieのRansack gem は、始めるのに適した場所です。
送信されたフォームと Ransack コードの間に中間層を提供する必要があります(セキュリティ上の理由から、これは良い考えです)。文字列を目的の形式から Ransack が理解できる形式に変換します。
デモ ページと gem のドキュメントを確認すると、必要な種類のクエリを作成するのは非常に簡単であることがわかります。
ビルドした条件からリクエストがどのGET
ように生成されるかを確認し、アプリケーションで Ernie がデモで使用したビルダーを、 のような文字列を受け入れる単一のテキスト フィールドに置き換えます(name:"john" color:"blue") or name:"bill"
。このフィールドが送信されたときにパターン マッチングを実行し、適切なクエリ文字列を作成して Ransack gem に渡します。
編集
「人気のある gem は何ですか?」などの今後の質問については、 The Ruby Toolbox______
を確認してください。Ransack がニーズに合わない場合は、Rails Searchカテゴリの gem に探しているものが含まれている可能性があります。私はあなたが説明していることとまったく同じようにRansackを個人的に使用しています。アプリケーションのモデルにカスタム クエリ インターフェイスを提供します。User
独自の検索クラスを作成することをお勧めします。私が行うアプリごとに、検索のニーズが大幅に変化し、検索したい任意の数のクラスに対して提示された、検索クエリで必要になる可能性のあるすべての変数を考慮する検索アプリを作成するのは十分に簡単であることがわかりました。
Search クラスで、希望する順序でコレクションを返すようにします。コレクションは、サーチャーが希望するオブジェクト インスタンスで構成できます。