上の画像では右側のユーザーが current_user
なんだけど
自身のアカウントは検索画面で表示されないようにしたかった
開発環境
ruby 2.6.5
Ruby on Rails 5.2.5
前提
user
の認証機能があるアプリ
slim
を使って書いている
kaminari
のページネーションで user
の一覧を表示している
検索機能を実装している
next メソッド
まず考えたのは next
メソッド
- @users.each do |user|
- if user == current_user
= next
こんなかんじで繰り返し処理のなかで current_user
だったらスキップする
しかし
繰り返しはスキップされているけど css
は生成されてしまっている
これではダサい
reject メソッド
繰り返しをスキップするのではなく DB のデータを加工するべきだと考えた
reject
メソッドをつかってみる
コードは
@users = @q.result(distinct: true)
@users =@users.reject{|user| user == current_user}
こんなかんじ。
これで user
が current_user
のときだけ reject
した配列を返す
データもいい感じ
これに kaminari
のページネーションをしているので
@users =@users.reject{|user| user==current_user}.page(params[:page]).per(6)
とする。
するとなぜか nomethod
エラー
なぜ
どうやら kaminari
のレシーバーは ActiveRecord
を継承している必要がある
なので
@users = @q.result(distinct: true)
@users = User.where(id: @users.reject{|user| user == current_user}.pluck(:id)).page(params[:page]).per(6)
こういうコードを書いたらいけた
追記
どうやら kaminari
には配列用のメソッドがあるらしい
@users = @q.result(distinct: true)
@users = Kaminari.paginate_array(@users.reject{|user| user == current_user}).page(params[:page]).per(6)
Kaminari.paginate_array
というメソッドを使ったらいけた