今日は学習時間の確保が難しかったので進捗はよくない。
進捗
- キーワード検索完成
- 絞り込み検索着手。地方と都道府県以外は完成
学習
- ransackを使用した検索機能だと普通のやり方ではenumを検索してくれない。送る値と表示するデータを分けなければいけない。keyを送信してもデータベースで保存されているデータはvalue(数字)なのでvalueを送れるように設定してあげれば可能。
やり方は次にまとめて記述するが、一応簡単に説明するとeach文でチャックボックスを繰り返し作成することで可能。
(参考資料:https://qiita.com/kensuke_kumaki/items/4d714cf447d610bdb227) - 絞り込み検索のやり方。
今回は機能キーワード検索で検索機能の下準備はできているので、viewの記述だけUp.
qiita.rb
<div class="search">
<!--絞り込み検索 form_withで囲んであげることによって絞り込み検索が可能-->
<%= form_with model: @q, method: :get, url: search_path do |f| %>
<div class="form-group">
<%= f.label "" %>
<!--モデルの中のenmuカラムの中身をKeyとvarで分けて、繰り返しチェックボックスを作成する処理-->
<% Place.categories.each do |k, v| %>
<!--label_tagでチェックボックスと文字を囲むことで文字を押してもチェックが入るようになる-->
<%= label_tag do %>
<!--_inは完全一致。チェックが入ったら検索-->
<%= check_box_tag "q[category_in][]", v %>
<!--表示するenumのkeyをGemを使用しないで日本語化して表示-->
<span><%= t "enums.place.category.#{k}" %></span>
<% end %>
<% end %>
</div>
<!--御朱印の種類チェックボックス-->
<div class="form-group">
<!-- チェックボックスの表示切替ボタン -->
<div class="checkbox-toggle mt-3 ml-auto mr-auto" id="kindButton">
御朱印の種類<br>
<font color="gray">▼</font>
</div>
<%= f.label "" %>
<!--チェックボックスの表示と非表示を切り替えるためのコンテナ-->
<div class="checkboxes" id="kindButtonCheckboxes" style="display: none;">
<% Place.goshuin_statuses.each do |k, v| %>
<%= label_tag do %>
<%= check_box_tag "q[goshuin_status_in][]", v %>
<span><%= t "enums.place.goshuin_status.#{k}" %></span>
<% end %>
<% end %>
</div>
</div>
<!--ペットチェックボックス-->
<div class="form-group">
<!-- チェックボックスの表示切替ボタン -->
<div class="checkbox-toggle mt-3 ml-auto mr-auto" id="petButton">
ペット<br>
<font color="gray">▼</font>
</div>
<%= f.label "" %>
<!--チェックボックスの表示と非表示を切り替えるためのコンテナ-->
<div class="checkboxes" id="petButtonCheckboxes" style="display: none;">
<% Place.pet_statuses.each do |k, v| %>
<%= label_tag do %>
<%= check_box_tag "q[pet_status_in][]", v %>
<span><%= t "enums.place.pet_status.#{k}" %></span>
<% end %>
<% end %>
</div>
</div>
<%= f.submit "検索開始" %>
<% end %>
</div>
form_withで絞り込みしたいものを囲む。あとは繰り返しフォームを作成して閉じて作成して閉じてを繰り返して最後にsubmitで終了させるだけ。基本さえできてしまえばあとは繰り返しなので簡単だった。
エラー
ヒント
今回は必要なかったので参考していないが、ransackを使用した検索はいろいろなことができそうなのでこれからのためにここに参考資料として残しておこう。
- ransackの説明書
参考資料:https://activerecord-hackery.github.io/ransack/ - ransackについて
参考資料:https://zenn.dev/ukkyon/articles/587cc6fcda1f9c - 複数モデルでの検索機能
参考資料:https://stackoverflow.com/questions/16775207/search-multiple-models-at-once-with-ransack - ransackの使い方
参考資料:https://pikawaka.com/rails/ransack#*_cont_any
上記に記述した参考資料も似たようなことを記述しているが、これらを見比べながら実装すればいけそう。
明日の予定
地方と都道府県の絞り込み機能を完成させる。