個人開発アプリを作成していて、人気投稿順に見られると使いやすくなると思い、
基本的にこちらの記事を参考にしながら実装しました。
routes.rb
routes.rb
get 'rank' => 'shops#rank'
私の場合はshopsコントローラーのrankアクションに設定しました。
shops_controller.rb
shops_controller.rb
def rank
@all_ranks = Shop.find(Favorite.group(:id).order('count(shop_id) desc').limit(5).pluck(:shop_id))
end
shopsコントローラーにrankメソッドを定義。いいねが多い投稿順に表示させます。
rank.html.slim
rank.html.slim
- @all_ranks.each.with_index(1) do |shop, i|
h5.col-md-5
.card.shadow
| No.
= i
|
= link_to shop.name, shop_path(shop)
= link_to((image_tag shop.picture.url), shop_path(shop.id), class: 'shop-picture') if shop.picture.url.present?
viewファイルを作成し、表示させます。例として抜粋しました。
後はCSSで外観を修正します。
@all_ranks.each.with_index(1) do |shop, i|
上記より、いいねが多い順に表示させることができます。
完成
お手軽にランク形式での表示が完成しました。