🦁
Rails|adminとuserで検索結果に表示させるものを変更する
目標
adminでログインしている時、is_open
カラムがfalse
の投稿を検索結果に表示させる。
それ以外の場合、is_open
カラムがtrue
の投稿だけを検索結果に表示させる。
前提
deviseを導入済み
投稿はSchoolモデル
is_open
カラムは公開状況を表すカラム。true
の時に公開になるようにする。
検索機能の導入については、こちらの記事参照。
モデル
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