Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails使用集合在部分内部呈现部分_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2_Rendering - Fatal编程技术网

Ruby on rails Rails使用集合在部分内部呈现部分

Ruby on rails Rails使用集合在部分内部呈现部分,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,rendering,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,Rendering,我有一个分部嵌套在分部的集合中。比如说 <= render partial: "users/user", collection: @users, as: :user %> 它是这样工作的,但问题是它为每个用户对象呈现\u user\u info.html.erb部分,这会花费很长时间。我怎样才能避免这种情况?有什么建议吗?呈现部分内容通常需要时间。我考虑了两种减少渲染时间的方法: 减少部分文件,这意味着不要使用部分文件 实现适当的缓存策略,在这种情况下通常是片段缓存 有关Rails

我有一个分部嵌套在分部的集合中。比如说

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

它是这样工作的,但问题是它为每个用户对象呈现
\u user\u info.html.erb
部分,这会花费很长时间。我怎样才能避免这种情况?有什么建议吗?

呈现部分内容通常需要时间。我考虑了两种减少渲染时间的方法:

  • 减少部分文件,这意味着不要使用部分文件
  • 实现适当的缓存策略,在这种情况下通常是片段缓存
  • 有关Rails中缓存策略的更多信息,请参阅:


    您应该将片段缓存与多取片段一起使用,这将给您带来显著的提升:
    (此gem已经是Rails 5的一部分)

    Rails将只正确缓存顶级部分模板。 我的建议是使用[content_for][1]功能将用户信息部分移到顶部。 在主布局中:

    <%= render partial: "users/user_info", collection: @users, as: :user %>
    <%= render partial: "users/user", collection: @users, as: :user %>
    
    
    
    在“用户信息”部分:

    <% content_for "user_info_#{user.id}" do %>
    <!-- your user_info content -->
    <% end %>
    
    <!-- your user content -->
    <%= content_for "user_info_#{user.id}"%>
    
    
    
    在“用户”部分中:

    <% content_for "user_info_#{user.id}" do %>
    <!-- your user_info content -->
    <% end %>
    
    <!-- your user content -->
    <%= content_for "user_info_#{user.id}"%>
    
    
    
    在这种情况下,用户信息和用户部分模板都将被正确缓存,并且渲染所需的时间将更少。
    [1] :

    我想你是说,部分用户信息是为部分用户中的每个用户呈现的。是吗?@Austio是的,没错。您的local:user将在整个部分渲染过程中共享。您最好手动循环,以使sub_partial具有适当的用户上下文。Hi@Austio,您能给出sub_partial的示例吗?谢谢