まずは、商品の購入頻度が多い順で上位5つのみを表示するランキングを作ります。
def index
# 商品を人気順にランキングで5つだけ表示
@rank_products = Product.find(OrderDetail.group(:product_id).order('count(product_id) desc').limit(5).pluck(:product_id))
end
次に、ビューの方で表示します。
先ほど作った「@rank_products」を使い、かつ「with_index(1)」とする事で、1から順にeachするたびに数字を増やして表示することができます。
つまりは、人気の商品を1位〜5位という表示を含めてビューに表示できます。
<% @rank_products.each.with_index(1) do |product, i| %>
<h6>第<%= i %>位</h6>
<%= link_to product_path(product) do %>
<%= attachment_image_tag product, :image, :fill, 120, 120, fallback: "pic_default/no-image.jpg", size:'120x120' %>
<% end %>
<h6>
<%= link_to product_path(product) do %>
<%= product.name %>
<% end %>
</h6>
<p><%= product.add_tax_price.to_s(:delimited) %> 円</p>
<%= link_to "詳細をみる", product_path(product) %>
<% end %>