railsで投稿数ランキングの作成


作るもの

  • rails
  • 質問への回答数の多い人ランキング

全体像

Post(質問)に対してAnswer(回答)をするのですが、この回答数が多いユーザーをランキング形式で表示したい。

仕様

この記事を参考に作っていった

Like.group(:note_id)#まず、記事の番号(note_id)が同じものにグループを分ける
order('count(note_id) desc')#それを、番号の多い順に並び替える
limit(3)#表示する最大数を3個に指定する
pluck(:note_id)#そして最後に:note_idカラムのみを数字で取り出すように指定。

こんな感じにgroup化して並べていき、配列として渡す。

配列にnilがある場合を考慮

ただ上記のコードだと配列として渡したuser_idを聞きに行ったときにnilだった場合にfindなのでエラーが出る。そこでwhereで抽出。idをpluckで配列で渡してその配列をwhereで順番に抽出していく。

@ranking_users = User.where(id: Answer.group(:user_id).order('count(user_id) desc').limit(3).pluck(:user_id))