Rails 如何缓存部分?

Rails how to cache partial?

我为 table 中的每一行使用 render partial: 'fragment', locals:{obj:item}。 处理整个页面需要很长时间。

有没有办法在第一次加载时保存每个项目的所有片段,而不是在服务器工作期间每次都重新渲染它们?

已更新

card/index.html.haml
%table 
  =render partial: 'card/card', collection: @cards, cached: true

card/_card.html.haml
-cache card do
  %tr=card.title

card_controller.rb
def index
  @cards = Card.order(:name)
end

已解决

添加到 development.rb 后缓存开始工作:

config.action_controller.perform_caching = true
config.cache_store = :memory_store, { size: 64.megabytes }

在默认配置中 rails 没有缓存 enabled/configured 在开发中。 从 rails 5 开始,您可以 touch tmp/caching-dev.txtrm tmp/caching-dev.txt 并重新启动服务器以切换它(对于早期版本,您可以将其反向移植到您的应用程序,请参阅 config/development.rb of 5.2.1)。

请注意,您还必须配置生产环境并拥有缓存后端 - 在每个工作线程中拥有单独的缓存可能会很浪费。因此 redis/memcached 应该很方便。

然后作为经验法则 - 最好在开发中使用相同的缓存存储和类似的配置,因为缓存存储具有非零延迟,有时不缓存某些东西会更快并且你想要你的开发环境更接近生产。

或者您可以 运行 rails dev:cache 切换缓存。