each 내에서의 render 부분을 collection으로 변경하여 가속화

문제



뷰 내에서 부분 템플릿을 each로 호출할 때 곤란한 일.

예) 루트 (welcome) 화면에서 픽업 한 상품 일람을 표시 (상품 일람은 다른 화면에서도 사용하기 때문에 부분화)

welcome_controller.rb
 @pickups = Product.all.where.not(pickup_at: nil).joins_i18n(locale_id: @current_lang.id).includes(countries: :country_i18ns).shuffle

welcome.html.erb
    #問題点のみ抜粋
    <% @pickups.each do |p| %>
      <%= render partial: '/shared/products/index_item', locals: { p: p } %>
    <% end %> -->

/shared/products/_index_item.html.erb
<div class="col-xs-6 col-md-3">
  <section class="product_list">
    <%= link_to product_maker_path(id: p.maker_id, product_id: p.id) do %>
      <div class="photo_box">
        <div class="photo_inner photo_contain" style="background-image:url(<%= asset_path p.main_image.thumb %>);" >
          <% p.campaigns.each do |camp| %>
            <div class="cam_lavel"><%= camp.i18n.label %></div>
          <% end %>
        </div>
      </div>
      <div class="pdt_list_ex">
#以下省略



each로 돌릴 때마다 부분 파일을 불러 버린다.
로드 속도가 느립니다. . . . .

해결책



each 안이 아닌 collection을 사용하여 부분을 render

welcome.html.erb
 <%= render partial: '/shared/products/index_item', collection: @pickups, as: :p %>

부분을 ​​불러내는 것은 1회.

좋은 웹페이지 즐겨찾기