#通常の検索結果
全データの中から、検索ワードにヒットしたものだけが表示される。
もしヒットがない場合、全データが表示される。
(上記でいうと渋谷も含め六本木でも川崎でも出てくる)
・・・なぜ?
(どうもransackを使う際、controller側で記載する.result
(検索を行うメソッド)の仕様上こうなっている模様。)
ヒット0件の場合、検索結果に何も表示させない。
#やり方
ransackの使い方は色々とわかりやすい記事があるので
そちらで確認してください。ここでは省略します。
def hoge
@search = Post.ransack(params[:q])#[:q]の中身(検索範囲)の記述は省略します。
@result = @search.result(distinct: true)
@check = params[:q]
controller側に上記のように記述されているとして、(必要に応じて以下変更要)
-hoge
→検索結果を出すページのアクション
-Post
→検索したいモデル
-@search
→検索内容をいれたローカル変数
-@result
→検索結果をいれたローカル変数
-@check
→検索範囲をいれたローカル変数
<% if @check.present? %><!-- ここが重要 -->
<% @result.each do |result| %>
<!-- 中略 -->
<% end %>
<% else %><!-- ここが重要 -->
<% end %><!-- ここが重要 -->
上記のように、通常の検索結果表示のための記述を
<% if @check.present? %>
と<% else %>
で挟みます。
ここまでで、もし検索条件には当てはまるものがあれば表示となり、
続く<% else %><% end %>
により、当てはまらなければ何も表示しないとなります。
これだけ!
#参考ページ
.present?
のあたりの使い方については、こちらが参考になります。
https://qiita.com/somewhatgood@github/items/b74107480ee3821784e6