もふもふ技術部

Rails3 絞り込み検索


前回の続きから、絞り込み検索の機能を追加してみたいと思います。

ページングを追加するときにgemを追加しましたが、
検索もgem追加で出来るようです。

参考
検索用のgem「ransack」を使ってみる

準備

Gemfileの末尾に以下を追加します。

bundle installを行い、サーバの再起動をします。

ransackを使って実装

Controllerの編集を行います。
pageメソッド使いながら、どう書けばいいんだろうと思いながら
試行錯誤していたら、次のように編集したらできました。

変数searchはviewで使うので、変数infosから切り離しています。

次はviewの編集です。ページの先頭の方に次のコードを追加します。

テキストフィールドのidを「name_cont」と指定していますが、これは検索方法の指定らしいです。
この場合は「部分一致」です。
詳しくはRansackのススメの「searchの書き方」を参照してください。

これで検索の実装ができました。

search1 search2

検索ができていて、ちゃんとページングの機能も残っていて、
かつ、ページングしたときに検索条件が記憶されています!

おまけ

今回、infos_controller.rbの編集で、searchメソッドを使いました。
そのメソッドのパラメータ名に「q」を指定しています。
これ、q以外のパラメータでは検索がうまくいきません。

何で「q」なんだろう…と思い、なんとなくhtmlを見てみると、
今回作成したform内のテキストフィールドの属性がこのようになっていました。
search3

どうやら、「ransack」はデータを渡すときにデフォルトで”q”の配列に値を入れて渡すみたいですね。
Viewのtext_fieldで入力された値をControllerに渡して、
Controllerのsearchメソッドで、配列”q”に入っている値を取り出して
それをModelに渡して検索をかけにいっているイメージでしょうか。

The following two tabs change content below.
根本 大幹

根本 大幹

社会人2年目。 今までブログ書いたことありません! 勉強は明日からがんばる。
根本 大幹

最新記事 by 根本 大幹 (全て見る)