2016-06-08 5 views
0

레일스 서버를 로컬에서 실행하면 내 제품 4 개 모두 올바르게 표시됩니다 (스크린 샷 : Products index on local server 참조).하지만 Heroku에서 내 사이트를 열면 한 제품이 계속 반복됩니다. 4 제품 스팟. 내 자산을 미리 컴파일하려고했지만 아무 것도하지 않는 것 같습니다.제품 반복 제품 색인보기

또한 내 production.rb 파일에 config.serve_static_files = true 및 config.assets.compile = true 이 있습니다.

여기 내 index.html.erb 파일이며 여기에게 Heroku에 사이트입니다 : 내가 그 캐시에 문제가 확신 https://dedesign.herokuapp.com/products

<p id="notice"><%= notice %></p> 

<h1>Listing Products</h1> 

<div class="container-fluid"> 
    <div class="row"> 
    <% @products.each do |product| %> 
     <div class="col-sm-2 col-md-4"> 
     <% cache(cache_key_for_products) do %> 
     <%= render partial: "product", locals: {product: product} %> 
     <% end %> 
     </div><!-- col div --> 
    <% end %> 
    </div><!-- row div --> 
</div><!--container div --> 

<!-- remove table <table> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>Description</th> 
     <th>Image url</th> 
     <th>Colour</th> 
     <th>Price</th> 
     <th colspan="3"></th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @products.each do |product| %> 
     <tr> 
     <td><%= product.name %></td> 
     <td><%= product.description %></td> 
     <td><%= product.image_url %></td> 
     <td><%= product.colour %></td> 
     <td><%= product.price %></td> 
     <td><%= link_to 'Show', product %></td> 
     <td><%= link_to 'Edit', edit_product_path(product) %></td> 
     <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> --> 

<br> 

<%= link_to 'New Product', new_product_path %>` 
+0

당신이 레일 (12) 요소 보석 설치되어 있습니까? @products 란 무엇입니까? heroku 콘솔의 Product.all과 동일합니까? –

+0

예 레일 12 팩트 젬이 설치되어 있습니다. "당신의 heroku 콘솔에서 Product.all과 동일합니까?" -> 어떻게 알아낼 수 있습니까? 내 제품 컨트롤러 코드에 대한 링크는 다음과 같습니다. https://github.com/dbukvic/nameofapp/blob/3345ab569c2b674ce649a9cb6c3f57c64fc21dc8/app/controllers/products_controller.rb – dbukvic

답변

0

. 해결하는 방법은 내가 cache_key_for_products은 도우미 또는 종류의 뭔가에 정의 된 방법이 있으리라 믿고있어, 여기에

<% @products.each do |product| %> 
    <div class="col-sm-2 col-md-4"> 
    <% cache(cache_key_for_products, product) do %> 
     <%= render partial: "product", locals: {product: product} %> 
    <% end %> 
    </div><!-- col div --> 
<% end %> 

입니다. 나는 그 문제를 해결해야한다고 생각하지만, 그렇지 않으면 알려줘.

UPDATE가 나는 cache_key_for_products가 AR :: 수집/기록의 종류를 반환 한 가정.

<% cache(@products) do %> 
    <% @products.each do |product| %> 
    <div class="col-sm-2 col-md-4"> 
     <% cache(product) do %> 
     <%= render partial: "product", locals: {product: product} %> 
     <% end %> 
    </div><!-- col div --> 
    <% end %> 
<% end %> 

또는 다른 방법은 다음과 같습니다 :

그러나, 귀하의 경우에, 나는 더 나은 방법이있을 거라고 생각

<% @products.each do |product| %> 
    <div class="col-sm-2 col-md-4"> 
     <% cache [@products, product] do %> 
     <%= render partial: "product", locals: {product: product} %> 
     <% end %> 
    </div><!-- col div --> 
    <% end %> 
+0

의견을 보내 주셔서 감사합니다. 나는 그것을 시험해 보았고 이제는 "유감 스럽지만 뭔가 잘못됐다"고 내 제품 색인에 올렸습니다. 그 도움 경우 여기 cache_key_for_products 코드 : (: updated_at) .try (: UTC) .try (: 그리고 to_s \t 데프 \t \t 카운트 \t \t = Product.count \t을 \t max_updated_at = Product.maximum cache_key_for_products ProductsHelper '모듈 : https://github.com/dbukvic/nameofapp/ : 수) \t \t "제품/모든 - - # {수} # {max_updated_at}" \t 끝 끝 '여기 – dbukvic

+0

는 GitHub의에 대한 링크입니다 blob/a00d846caf328e3efdf8dc2cfe044bc29291ae1b/app/helpers/products_helper.rb – dbukvic

+0

오! 나는 cache_key_for_products가 일종의 AR 인스턴스/콜렉션이라고 생각했습니다. 일부 변경 사항을 반영하여 내 대답을 업데이트합니다. 기본적으로 cache_key를 정의하는 이유는 컬렉션이 변경 될 때 캐시를 업데이트해야하지만, ActionView # cache 메소드는 전달 된 객체/컬렉션에서 cache_key 메소드를 호출한다는 것입니다. 귀하의 경우에는 최선의 방법은 가장 바깥 쪽 레이어 (컬렉션)를 캐시하고 각 개체를 캐싱하는 것입니다. 그렇지 않은 경우 이전에 시도했던 것으로 가정하는 각 개체로 컬렉션을 캐싱해야합니다. 내 대답을 지금 업데이트 중입니다. – oreoluwa

관련 문제