Nuxt.jsとRailsでコメントが多い順に投稿を表示し、コメント数も表示する
ポートフォリオ作成中に「人気順に投稿をいくつか表示させたいな〜」と思い、投稿についているコメントが多い順に投稿を表示させ、それぞれについているコメントの数を表示させた。忘れないうちにメモしておく。
postsテーブルとcommentsテーブルは紐づいている。
ちなみにNuxt.jsとRails間はaxiosを使って通信している。
ランキングメソッドを作る
投稿に紐づいているコメントの数をcountメソッドで算出し、その数が多い順にソートさせる。
今回はlimit(5)で上位5つのスポットを抽出した。
posts_controller.rb
def ranking
@all_ranks = Post.find(Comment.group(:post_id).order('count(post_id) desc').
limit(5).pluck(:post_id))
end
コメント数をカウントするメソッド作成
post.rb
def comment_count
comments.count
end
json形式で送る
メソッドを"@all_ranks"と一緒にjsonで送る
送るときは"methods:"とインスタンスの前に".to_json"をつける
posts_controller.rb
def ranking
@all_ranks = Post.find(Comment.group(:post_id).order('count(post_id) desc').
limit(5).pluck(:post_id))
# 追加
render json: @all_ranks.to_json(methods: [:comment_count])
end
jsonデータのハッシュの中に"comment_count":"コメント数"と表示されていればOK
Nuxt側で表示させる
axiosでgetしdataのpostに格納(省略)
あとは表示させるだけ
index.vue
<template>
<div>{{ post.comment_count }}</div>
</template>
Author And Source
この問題について(Nuxt.jsとRailsでコメントが多い順に投稿を表示し、コメント数も表示する), 我々は、より多くの情報をここで見つけました https://zenn.dev/cool_boxing/articles/9309a44b3a688b1e10f5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol