こんにちは、おーしまです。
今回は、人気タグを取り出す方法について、書いていきます。
今回はタグですが、データベースの同士で紐づいていれば使うことができます。
原理としては、
中間テーブルのcar_tagsテーブルから、一番多く紐づいているタグを取り出せば良いということです。
@tags = Tag.find(CarTag.group(:tag_id).order('count(tag_id) DESC').limit(3).pluck(:tag_id))
このように取り出します。
まずは、CarTag.group(:tag_id)、で中間テーブルであるcar_tagsテーブルのtag_idが同じものをグループ化してまとめます。
それを、.order('count(tag_id) DESC')、でtag_idが多い順に並べます。これで、一番多いものが先頭に来ます。つまり、ランキングされました。
それを、.limit(3)、で上位3つを取り出します。
.pluck(:tag_id)、でcar_tagsのtags_idのデータだけ取り出します。これで、配列に[1, 4, 6](例)みたいに、上位3つのタグのidを取り出せたので、それをTag.find()、でレコードごと取り出します。
今回はここまでです。
それでは、また