0

我正在尝试在 Rails 中实现缓存并希望缓存整个主页。到目前为止,最快的方法是cache_page :home在控制器中使用方法,但它似乎一次都不起作用。这是我的home方法。

  def home 
    @banners = BannerUpload.order('series').with_attached_image
    img = ActionController::Base.helpers.asset_path("share-meta.png")

    @sections = Section.includes(:homepage_items).where(active: true).order('position')
    @testimonials = Testimonial.where(status: true)
  end

这是我得到的错误:

undefined method each_with_index for nil:NilClass对于@banners对象,意味着即使第一次查询也没有命中。

我也找不到任何关于这个问题的文章。我尝试设置不同的商店但没有帮助:

config.cache_store = :mem_cache_storeconfig.cache_store = :memory_store

编辑

我自己解决了。实际上我不知道默认情况下页面缓存不包含在rails中。所以我不得不将它包含在 gem 'actionpack-page_caching' 之后,它工作正常。

4

2 回答 2

0

我自己解决了。实际上我不知道默认情况下页面缓存不包含在rails中。所以我不得不gem 'actionpack-page_caching' 在它工作正常之后将它包含在内。

于 2020-11-28T02:59:35.913 回答
0

就像您说的那样:即使第一次查询也没有命中。所以它看起来像@bannersnil 并且你想调用each_with_index它,这与缓存无关。在您看来,您可以先检查是否@banners不为零,然后调用each_with_index它。如果您修复错误,您的缓存将起作用。

于 2020-11-27T13:46:21.033 回答