⭐️掲示板の検索機能を実装

ransackを用いて掲示板の検索機能を実装

・検索時には、検索フォームに入力された文言が「掲示板のタイトルor本文」に含まれている掲示板のみを表示。

・ブックマーク一覧のページで検索した場合は「ブックマークした掲示板の中から」検索条件に合致したものを表示。

手順

  • 1 . gem ransackをインストール

  • 2 . コントローラーに検索機能を追加

  • 3 . Viewに反映

1 . gem ransackをインストール

・Gemfileにgem ransackを記述して
bundle install

2 . コントローラーに検索機能を追加

掲示板一覧画面での検索はboards#indexアクションで行います。

Boardモデルを通してransackメソッドを使って

検索フォームから送られてきた情報をparams[:q]で受けて、@searchに代入。

resultメソッドで検索結果の表示ができる。

Image from Gyazo

・ブックマーク一覧画面での検索はboards#bookmarksで行う。

Image from Gyazo

3 . Viewに反映

・課題に指定は無いが、掲示板一覧画面とブックマーク一覧画面の検索フォームは同じ条件で実装(ここで言えば、掲示板のタイトルor本文の部分一致検索)だったので、記述量を減らすため
_search_form.html.erb というパーシャルを作成して掲示板一覧画面とブックマーク一覧画面でレンダリングするようにしました。

Image from Gyazo

上記、viewからsearch_form_forへ検索ワード入力してEnterを押すと、指定したpathへ送信。

今回はboards_controllerのindexアクションかbookmarksアクションへ送信して検索する仕様。

search_field
form_forやform_withのransack版のようなもの

:title_or_body_cont
この記述でタイトルor本文で_cont(部分一致検索)が出来る。

掲示板一覧画面とブックマーク一覧画面でそれぞれpathとコントローラーに定義したインスタンス変数を指定してレンダリング

Image from Gyazo

Image from Gyazo

gem ransackで使える検索メソッド一覧

Image from Gyazo

🟢総括

今回ransackを使った検索機能を学びましたが、
コントローラーでの定義が少し難しかった。
しかし、ransackメソッドの意味さえ分かれば後はviewにform_withと同じやり方で表示出来て、
改めてform_withの仕組みについて深く理解できたので次にも生かしていきたいです!