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 %>