Rails如何缓存部分内容?

时间:2018-10-03 05:43:17

标签: ruby-on-rails caching partial

我正在为表中的每一行使用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 }

2 个答案:

答案 0 :(得分:1)

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

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

那么,根据经验,最好在开发中使用相同的缓存存储区和类似的配置,因为缓存存储区具有非零延迟,有时不缓存某些内容会更快,并且您希望开发环境成为更接近生产。

答案 1 :(得分:1)

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