LoginSignup
3
5

More than 5 years have passed since last update.

ransackでヒット0件の時には検索結果に何も表示させない方法

Last updated at Posted at 2019-02-22

通常の検索結果

スクリーンショット 2019-02-22 17.09.45.png
全データの中から、検索ワードにヒットしたものだけが表示される。

もしヒットがない場合、全データが表示される。
(上記でいうと渋谷も含め六本木でも川崎でも出てくる)

・・・なぜ?

(どうもransackを使う際、controller側で記載する.result(検索を行うメソッド)の仕様上こうなっている模様。)

やりたいこと

スクリーンショット 2019-02-22 16.49.59.png

ヒット0件の場合、検索結果に何も表示させない。

やり方

ransackの使い方は色々とわかりやすい記事があるので
そちらで確認してください。ここでは省略します。

controller.rb
def hoge
@search = Post.ransack(params[:q])#[:q]の中身(検索範囲)の記述は省略します。
@result = @search.result(distinct: true)
@check = params[:q]

controller側に上記のように記述されているとして、(必要に応じて以下変更要)

-hoge→検索結果を出すページのアクション
-Post→検索したいモデル
-@search→検索内容をいれたローカル変数
-@result→検索結果をいれたローカル変数
-@check→検索範囲をいれたローカル変数

検索結果表示画面.html
<% if @check.present? %><!-- ここが重要 -->

      <% @result.each do |result| %>
    <!-- 中略 -->
      <% end %>

<% else %><!-- ここが重要 -->
<% end %><!-- ここが重要 -->

上記のように、通常の検索結果表示のための記述を
<% if @check.present? %><% else %>で挟みます。
ここまでで、もし検索条件には当てはまるものがあれば表示となり、
続く<% else %><% end %>により、当てはまらなければ何も表示しないとなります。

これだけ!

参考ページ

.present?のあたりの使い方については、こちらが参考になります。
https://qiita.com/somewhatgood@github/items/b74107480ee3821784e6

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5