はじめに
タグ一覧の作成順?の表示が使いにくいと感じ、
初心者(300)←()の中身が多い順に表示して少ないものは表示させないようにできたので投稿します。
多く投稿されているランキング方式に少しだけ(本当に少し)工夫が必要だったので、
とても簡単ですがよろしくお願いします!
⚠タグ機能は実装している前提です.
⚠もし投稿数が多い順で表示されなかったら、自分の環境ではPostモデルにdefault_scopeで最新順にしているからかもしれません。
こちらの記事を参考に実装しました!
実装後に気が付きましたが、めちゃくちゃわかりやすい記事が存在してました!!↓↓
【Rails】いいね順・投稿数順など ◯◯順の考え方・方法
環境
Rails: 6.1.5
Ruby: 2.6.3
結論
posts_controller.rb
class Public::PostsController < ApplicationController
def index
@tags_list = Tag.find(PostTag.group(:tag_id).order('count(post_id) desc').limit(7).pluck(:tag_id))
# 省略
end
end
軽く解説
いいねランキングとの変更ポイントとしては、
参照モデルとgroup(:tag_id)など中身の部分です。
posts_controller.rb
# Tagは中間テーブルを使用しているため、外部キー(tag_idとpost_id)を持つPostTagから
Tag.find(PostTag
# :tag_idを基準に
group(:tag_id)
# post_id(投稿数)がdesc(多い順)に並べる *ここ:post_idではないので注意
.order('count(post_id) desc')
#上位7件の:tag_idを抜き出す
.limit(7).pluck(:tag_id))
前述したこちらの記事では全てtag_id
で実装していたのでそっちでもいいと思います!
最後に
タグのランキングに関する記事があまり見つからなかったので投稿しましたが、逆にとてもわかりやすい記事に出会えました😁
最後まで閲覧いただきありがとうございました!