今回はRansackを使用した検索機能が学べるミニアプリを作成したので、そのアプリについて解説したいと思います。Ransackの主要機能が学べるミニアプリになっているので、Ransackの知識が曖昧な方、より理解を深めたい方はぜひ実際に実装してみてください。Ransackを使えば複雑な検索機能が簡単に実装できるだけでなく、ソート機能(並び替え機能)も簡単にできるので非常に便利なgemです。Railsで検索フォームを簡単に実装することができるgemです。単なる検索機能だけでなく、ソート機能(並び替え機能)も兼ね備えているので、Railsで検索フォームを実装する際の定番になっています。今回はデータベースに保存されている本(漫画)を検索できるミニアプリを作成します。2つを実装していきます。はじめに、検索機能を実装する前の事前準備を行いましょう。具体的には本(漫画)を投稿できるアプリケーションの雛形を作成します。アプリケーションの作成まずは以下のコマンドで新規アプリケーションを作成しましょう。db:create今回開発するアプリケーションの環境は以下のようになります。アプリケーション名:search-appRails:6.0.3.2Ruby:2.6.5DB:MySQLRansackの導入Ransackはgemで管理されているので、簡単に導入することができます。installScaffoldの導入Scaffoldの機能を利用し、bookに関するアプリケーションの雛形を作成します。カラムは「title(タイトル)」「auther(作者)」「price(料金)」の3つです。db:migrateここまでで簡単な投稿機能を実装することができました。投稿ページは「localhost:3000/books」となります。続いて、データベース上に本(漫画)のデータを投入しましょう。データの投入にはseedファイルを使用します。db:seedすると、先ほど投稿した内容と共にseedの情報が表示されるはずです。検索機能実装1ここから検索機能の実装に取り掛かります。複数のカラムからキーワード検索できる機能を実装していきます。実装イメージとしてはAmazonのような検索窓になります。フォームの作成まずは検索フォームを作成しましょう。今回の検索では「タイトル」と「作者」で検索できるフォームを作成します。「app/views/books/index.html.erb」に以下の記述を追記します。次に検索パラメーター@qを受け取る記述をコントローラーに記述します。「books_controller.rb」のindexアクションを以下のように編集しましょう。trueは、重複する検索結果を除外する役割を持つ実装確認ここまででキーワード検索機能が完成しました。検索機能実装2続いては、複数の条件で検索できる機能を実装していきます。先ほどは1つの検索フォームからしか検索できませんでしたが、今回は複数の検索フォームを使用します。フォームの作成まずは検索フォームを作成しましょう。「app/views/books/index.html.erb」に以下のように編集します。thanの省略形で〜より小さいことを表すコントローラーの編集コントローラーについては検索機能実装1で記述したコードと変わりません。実装確認ここまでで複数条件で検索できる機能が完成しました。ソート機能実装では最後にソート(並び替え)機能を実装しましょう。Ransackには昇順降順でソートできる機能も兼ね備えているため、簡単に実装することができます。「app/views/books/index.html.erb」を以下のように編集します。%>これだけの記述で昇順降順のソート機能が実装できました。参考サイトRansackGithub:https://github.com/activerecord-hackery/ransack[Rails]ransackを利用した色々な検索フォーム作成方法まとめ:https://qiita.com/nishina555/items/2c1f8bae980e426519bc#%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97%E6%96%B9%E6%B3%95今回はRansackを用いた検索機能が学べるミニアプリについて解説しました。複数カラムの検索やソート機能といった一見難しそうに見える機能も、Ransackを使用することで簡単に実装することができます。ミニアプリ実装を通して理解を深めていただけたらと思います。r...Railsエンジニアちばよしはる銀座にあるヘルステック企業のRailsエンジニア。初心者から中級者向けに記事を更新しています。お酒とカレーと競馬が好き。TechTechMedia。