上の画像では右側のユーザーが 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 というメソッドを使ったらいけた

