29
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】ランキング機能の実装

Posted at

#ランキング機能について
ECサイトを見てるとランキング機能があふれていますね
例えば、、、
・ 新着ランキング
・ いいねランキング
・ 売り上げランキング
などです
この機能を応用すると様々ことができます。
是非、この記事を理解してランキング機能を実装してください!!
#実装方法の説明
実装環境はSNSサイトのようにユーザーのUserと投稿のPostテーブルがあり、いいね機能が実装されている状態です
##概要
Postのいいね数でランキングを作る
そのためにコントローラーでいいね数が多い順に投稿されたPostを取得する方法について解説します。
Viewでの表示方法についてはご自身で実装方法に対応させてください。
もし、いいね機能がわからない方がおられましたの実装方法はこちらの記事を参考にして実装してみてください!!
##具体的な実装方法の説明

Post.find("いいね数の多いPostのid")

findメソッドはIDでPostを探すメソッドですので、
いいね数の多いPostのidの取得して検索します。

Favorite.group(:post_id).order('count(post_id) desc').limit(3).pluck(:post_id)

group(:post_id)
  post_idでまとめるためのメソッドです
  post_idが同じレコードをまとめて並べ替えます
order('count(post_id) desc')
  count(post_id)した結果をdesc(降順)で並べ変えます
count(post_id)
  post_idが同じものを数えるメソッドです
  いいねテーブルに保存されているレコードを数えることでいいねの数を取得することができます
limit(3)
  上から3つだけ取得するメソッドです。
  3を5や2に変更すると5つや2つに変更することができます
pluck
  取得したレコードの情報をidに変更するメソッドです。
  
いいねが多いPost_IDからPostを取得する

Post.find(Favorite.group(:post_id).order('count(post_id) desc').limit(3).pluck(:post_id))

上で取得したいいねが多いPostのIDから該当するレコードを取得します。

以上がランキング機能の実装方法になります。

#参考記事
Railsでお手軽ランキング機能
https://qiita.com/MitsuguSueyoshi/items/18fa5e49a27e727f00b4

疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!

29
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?