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