#ランキング機能について
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
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!