Rails将部分嵌套到delevel

时间:2017-02-10 19:03:31

标签: ruby-on-rails performance partial

我有一个项目,该视图包含使用本地数据的嵌套部分。由于视图中的渲染太多,因此性能非常低。

这是看起来像这样的结构: 在控制器动作中:

format.html {render 'form'}

在form.html.erb文件中:

<%= render partial: 'template',
           locals: {
               header: (render partial: 'header'),
               body: (render partial: 'form')
               }
            %>

在_form.html.erb文件中:

<script>
   some script...
</script>
<!--Display error messages only after first submit      -->
<%= render partial: 'form_errors' %>

<!--Start of form-->
<div class="form_container">
  <% @tracker = 1%>
  <% @submission.form.modules.each do |module|%>
      <%=begin render partial: 'form_modules', locals: {
                              form: form,
                              module: module,
                                                        }
         rescue => e

         end %>

      <% if some condition %>
          module.questions.find_by(id: xx) - 1).times do |rep| %>
              <%=begin render partial: 'form_modules', locals: {
                                      form:form,
                                      module: module,
                                                         }
                 rescue => e

                 end  %>
          <%end%>
      <%elsif some condition %>
          <% module.qus.each do |q|
               trac = **
             end
             trac = **
             trac.times do |rep| %>
              <%=begin render partial: 'form_modules', locals: {
                                      form: form,
                                      module: module,                                   }
                 rescue => e

                 end  %>
          <% end if trac > 0 %>
      <%end%>
  <%end%>
</div>

在_form_modules.html.erb文件中:

<% if module.name == '***'%>
<%= *** %>
<%else%>
    <div id="module_<%= module.id %>" class="row-fluid modules"
         data-rep="<%= rep%>"
         data-module="<%= module.id%>"
         data-normalized="<%= /Normalized curation/i =~ module.op ? true : false%>">
      <div class="span12">
        <div class="box">
          <div class="title">
            <i id="icon" class="fa fa-icon"></i>
            <div class="caption"><%= module.name%></div>
            <div class="caption-helper">(<%= module.id%> v.<%= module.v%>)</div>
            <% if /Normalized curation/i =~ module.op and !module.qus.nil? %>
            <%# unless /Normalized curation/i =~ module.op and !module.qus.nil? %>
            <%# unless /***/ =~ module.op %>
                <div class="info">
                  <%= module.ques.valid_value%>
                  (xx)
                  <i class="fa fa-down"></i>
                </div>
            <% else %>
                <% if condition %>
                    <div class="module"><i class="fa"></i> Add</div>
                <%elsif condition %>
                    <div class="module"><i class="fa fa-trash-o"></i> Remove</div>
                <%end%>
            <%end%>
          </div>
          <div class="body">
            <div class="row-fluid">
              <% unless module.op.blank? %>
                  <div class="span2" align="right"><span style="font-size: medium">Ops:**;</span></div>
                  <div class="span10"><%= module.op %></div>
              <%end%>
            </div>
            <%=begin render partial: 'form_qus',
                            collection: module.qus, as: :qu,
                            locals: {
                                    form: form,
                                    module: module,
                                   }
            rescue => e

               end%>
          </div>
        </div>
      </div>
    </div>
<%end%>

在_form_qus.html.erb中:

    <% if condition %>
           <%= render partial: 'value',
                      locals: {
                        title: v
                      } %>
    <%end%>
             **     

然后在_value.html.erb文件中:            ***     

我的问题是,在渲染页面时,渲染嵌套的部分数千次并且性能非常低需要很长时间。我想删除嵌套的部分并将这些嵌套的部分转换为一个大部分的部分,并且只从顶层渲染一次,这将把数千个渲染切换为1次。如果有任何解决方案用文件路径替换嵌套的部分并呈现文件路径,我不会这样做。非常感谢。

0 个答案:

没有答案