概要
投稿をいいねの順番に並び替えることができます。
controller
favorites.controller.rb
def index
to = Time.current.at_end_of_day
from = (to - 6.day).at_beginning_of_day
@books = Book.includes(:favorited_users).
sort_by {|x|
x.favorited_users.includes(:favorites).where(created_at: from...to).size
}.reverse
@book = Book.new
end
- いいね数が多い順に表示させるためにコントローラー内で条件を定義する
- sort_byメソッドを使っていいね数を少ない順に取り出している。最後にreverseをつけて昇順から降順に切り替えている
sort_by {|x|
x.favorited_users.includes(:favorites).where(created_at: from...to).size
}.reverse
model
ユーザーの情報がfavorited_usersに格納されているため、includesの引数に入れることで、事前にユーザーのデータを読み込みしている
favorite.rb
has_many :favorited_users, through: :favorites, source: :user