Rails使用集合渲染部分内部部分

时间:2015-11-19 17:39:27

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 rendering

我有部分嵌套的内部集合。例如

<= render partial: "users/user", collection: @users, as: :user %>

_user.html.erb内部,我正在渲染另一个部分如下:

<%= render partial: "users/user_info", locals: {user: user}  %>

它以这种方式工作,但问题是它为每个用户对象呈现_user_info.html.erb部分,这使得它需要很长时间。我怎么能避免这个?有什么建议吗?

3 个答案:

答案 0 :(得分:0)

渲染部分通常需要时间。我想有两种减少渲染时间的方法:

  1. 减少部分文件,这意味着不要使用部分文件。
  2. 实施适当的缓存策略,在这种情况下,它通常是片段缓存。
  3.   

    有关Rails中缓存策略的更多信息,请查看:http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching

答案 1 :(得分:0)

你应该使用片段缓存和多次获取片段,这将给你一个显着的提升: https://github.com/n8/multi_fetch_fragments (这个宝石已经是Rails 5的一部分)

答案 2 :(得分:0)

轨道将仅适当地缓存顶级部分。 我的建议是也使用content_for功能将user_info部分移到顶部。 在您的主要布局中:

<%= render partial: "users/user_info", collection: @users, as: :user %>
<%= render partial: "users/user", collection: @users, as: :user %>

在您的“ user_info”部分中:

<% content_for "user_info_#{user.id}" do %>
<!-- your user_info content -->
<% end %>

在“用户”部分中:

<!-- your user content -->
<%= content_for "user_info_#{user.id}"%>

在这种情况下,user_info和用户partials将被正确缓存,并且渲染将花费更少的时间。