🦁

Rails|adminとuserで検索結果に表示させるものを変更する

2023/09/25に公開

目標

adminでログインしている時、is_openカラムがfalseの投稿を検索結果に表示させる。
それ以外の場合、is_openカラムがtrueの投稿だけを検索結果に表示させる。

前提

deviseを導入済み
投稿はSchoolモデル
is_openカラムは公開状況を表すカラム。trueの時に公開になるようにする。

検索機能の導入については、こちらの記事参照。
https://zenn.dev/airiin/articles/a39cea4c6fc49e

モデル

school.rb
def self.look_for(word, is_admin = false)
    if is_admin
      School.where("name LIKE ? OR name_kana LIKE ? OR name_en LIKE ?", "%#{word}%", "%#{word}%", "%#{word}%")
    else
      School.where("name LIKE ? OR name_kana LIKE ? OR name_en LIKE ?", "%#{word}%", "%#{word}%", "%#{word}%").where(is_open: true)
    end
  end

コントローラ

admin/searches_controller.rb
def search
    @word = params[:word]
    @schools = School.look_for(@word, admin_signed_in?).page(params[:page]).per(10)
  end

解説

コントローラで@schoolsに代入する値にadmin_signed_in?を追加する。
これはdeviseでadminモデルを作成すると、デフォルトで使用できるメソッドである。

モデルでこの値がfalseかどうか、で条件分岐させている。

Discussion