sortでlikeの件数順に表示させる

前回の続きです 取得した投稿をlike順にしました!
userモデル、postモデル、likeモデル作成ずみ

アソシエーション
  • userモデル
class User < ApplicationRecord
 //devise省略
 has_many :posts, dependent: :destroy
 has_many :likes, dependent: :destroy
 has_many :liked_posts, through: :likes, source: :post //追記
  • postモデル
class Post < ApplicationRecord
  belongs_to :user
  has_many :likes, dependent: :destroy
  has_many :liked_users, through: :likes, source: :user //追記
  • likeモデル(追記なし 参考)
class Like < ApplicationRecord
  belongs_to :user
  belongs_to :post
  validates_uniqueness_of :post_id, scope: :user_id
end
コントローラー

今回の注目ポイント!!↓
.sort {|a,b| b.liked_users.count <=> a.liked_users.count}

ここでは sort というrubyのメソッドを使って順序を操作している。 => sortに関してはこちらを参照
a.liked_users.count、b.liked_users.count が表しているのはそれぞれ各投稿のいいね数。 すなわち、各投稿のいいね数を比較して昇順で並び替えている。

。。。らしい

def show
    if current_user == @user
      @posts = Post.where(user_id: @user.id).sort {|a,b| b.liked_users.count <=> a.liked_users.count}
    else
      @posts = Post.where(user_id: @user.id,status_id: 2).sort {|a,b| b.liked_users.count <=> a.liked_users.count}
    end
end
ビュー
<% @posts.each do |post| %>

  #省略

<% end %>

b1essk.com