前提・実現したいこと
ここに質問の内容を詳しく書いてください。
ランキング機能を実装したいのですが、うまく順番どうりになりません。
投稿テーブルPost
いいね機能テーブルLike
として実装しています。
model
like
1class Like < ApplicationRecord 2 belongs_to :post 3 belongs_to :user 4 validates_uniqueness_of :post_id, scope: :user_id 5end
post
1class Post < ApplicationRecord 2 belongs_to :user 3 has_many :likes, dependent: :destroy 4 has_many :liked_users, through: :likes, source: :user 5end
user
1class User < ApplicationRecord 2 devise :database_authenticatable, :registerable, 3 :recoverable, :rememberable, :validatable 4 has_many :posts, dependent: :destroy 5 has_many :likes, dependent: :destroy 6 has_many :liked_posts, through: :likes, source: :post 7end
試したこと
コンソール上で、以下のコマンドを打って見ました。
Post.joins(:likes).group('posts.id').order(Arel.sql('count(posts.id) desc'))
countメソッドで、順番どうりになっているのか確かめてみたのですが、順番がPost.all
で出力したものと全く同じでした。
$ Post.joins(:likes).group('posts.id').order(Arel.sql('count(posts.id) desc'))[0].likes.count & Post.joins(:likes).group('posts.id').order(Arel.sql('count(posts.id) desc'))[1].likes.count & Post.joins(:likes).group('posts.id').order(Arel.sql('count(posts.id) desc'))[2].likes.count
どこが間違っているのか分かる方はいらっしゃいますでしょうか?
あなたの回答
tips
プレビュー