この記事は勉強した内容をアウトプットし、理解を深めるための学習用記事になっています。
説明の間違えている点などありましたらご指摘いただけると幸いです。
ransackを使った検索機能実装について
実装手順
1. gemに'ransack'を追加してインストール
gem 'ransack'
$ bundle install
bundle install後にサーバーを立ち上げ直すのを忘れていて30分くらいエラーで引っかかりました、、、
bundle install後にはrails sを忘れずに!
2. コントローラでの記述
このときに私は事前に投稿の一覧を表示させるとずっと勘違いしていました。なので投稿一覧用の変数# @dishes = Dish.allを準備していました。
調べているとransackではデフォルトで一覧画面できるみたいです!
def index
# @dishes = Dish.all
@q = Dish.ransack(params[:q])
@searchs = @q.result(distinct: true)
end
3. ビューでの記述
以下の記述でデフォルトの投稿一覧、検索フォーム、検索結果一覧が表示できます。
すごい便利ですね、、
search_form_for @q do |f| は
検索フォームの記述でsearch_form_forはransack独自の記述。
@qにはコントローラの記述によりDishモデルのidが格納されている。
[カラム]_contと記述することであいまい検索が可能になり検索した用語と一部がマッチすれば検索結果として表示される。
そのほかにも色々指定できるみたいなので試してみようと思います。
コントローラで記述している@sesrchsに検索結果が格納され、あとはeach文で検索結果を表示させる。
<%= search_form_for @q do |f| %>
<%= f.label :introduction, "Keyword" %>
<%= f.search_field :introduction_cont %>
<%= f.submit "検索" %>
<% end %>
<% @searchs.each do |result| %>
<%= image_tag result.dish_image, size: "100x100" %>
<%= result.dish_name %>
<% end %>
勉強になった点
-
bunndle install後はrails sでサーバーを再度立ち上げる。
-
ransackを使う際はデフォルトで一覧が表示される
検索方法がほかにも色々と存在するみたいなので指定して試してみようと思います。
ここまで見ていただきありがとうございました。
引き続き学習頑張ります。