2016-06-08 83 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

我敢肯定這是你的緩存問題。解決的方法是

<% @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 %> 

在這裏,我假設cache_key_for_products是放在你的助手或各種各樣的東西定義的方法。我想這應該解決問題,但讓我知道如果它不。

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代碼,如果這是有幫助的: 「模塊ProductsHelper \t高清cache_key_for_products \t \t計數\t \t = Product.count \t \t max_updated_at = Product.maximum(:的updated_at)。嘗試(:UTC)。嘗試(:to_s ,:號) \t \t 「產品/所有 - #{}計數 - #{} max_updated_at」 \t年底 結束」 – dbukvic

+0

這裏是在github一個鏈接:https://github.com/dbukvic/nameofapp/ BLOB/a00d846caf328e3efdf8dc2cfe044bc29291ae1b /應用/助理/ products_helper.rb – dbukvic

+0

哦!我認爲cache_key_for_products是一種AR實例/集合。現在更新我的答案以反映一些變化。基本上,我想之所以定義cache_key ..是確保當收集的變化,緩存應該更新,但是'#的ActionView方法cache'會調用'cache_key'方法上的對象/集合中的通過。在你的情況,我覺得什麼工作最好是緩存的最外層(集合)和緩存每個對象,否則,緩存與每個對象的集合,我假設你試圖做之前。現在更新我的答案。 – oreoluwa