目標
ランキングの表示
開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina
前提
※ ▶◯◯ を選択すると、説明等が出てきますので、
よくわからない場合の参考にしていただければと思います。
- controllerとviewのみ変更
- userモデル
- postモデル(:body, :score)
- いいね機能実装
- Google Natural Language APIによるコメント感情分析導入済み(投稿の点数付け)
※今回の方法では、
数値がない(いいねが押されていない、平均値がない)ユーザーは
表示されません。
controller
コントローラーさえできればできたも同然です!
平均値のランキング:app/controllers/users_controller.rb
def rank
@users = User.
find(Post.
group(:score).
order('avg(score) desc').
pluck(:user_id)
)
end
合計のランキング:app/controllers/posts_controller.rb
def rank
@posts = Post.
find(Favorite.
group(:post_id).
order('count(post_id) desc').
pluck(:post_id)
)
end
view
下記のようにeach降順順で表示可能
<% @users.each do |user| %>
<% end %>
<% @posts.each do |user| %>
<% end %>
Kaminariを使用する場合
前にKaminari.paginate_array( )、後ろに.page(params[:page])をつければOK
@posts = Kaminari.paginate_array(Post.find(Favorite.group(:post_id).order('count(post_id) desc').pluck(:post_id))).page(params[:page])