代码之家  ›  专栏  ›  技术社区  ›  user3437693

如何在Sinatra编写部分ERB模板?[已关闭]

  •  5
  • user3437693  · 技术社区  · 11 年前

    如何重构此代码?我在Sinatra上写,我需要分开成一个单独的文件

    <div class="row">
      <div class="col-xs-3">
        <% @user.posts.each do |post| %>
          <a href="/posts/<%= post.id %>"><%= post.title %></a><br>
          <p><%= post.body %></p>
          <% unless post.comment.blank? %>
            <% post.comment.each do |comment| %> 
              <p><%= comment.body %></p>
              <% unless comment.comment.blank? %>
                <% comment.comment.each do |comment2| %> 
                  <p><%= comment2.body %></p>
                  <% unless comment2.comment.blank? %>
                    <% comment2.comment.each do |comment3| %> 
                      <p><%= comment3.body %></p>
                    <% end %> 
                  <% end %> 
                <% end %> 
              <% end %>   
            <% end %>   
          <% end %> 
        <% end %>
      </div>
    </div>
    

    我的模型循环注释

    def up
        create_table :comments do |t|
          t.string :body
          t.integer :post_id
          t.integer :comment_id
          t.timestamps
        end
      end
    

    这是我的迁移模型注释

    1 回复  |  直到 11 年前
        1
  •  4
  •   Uri Agassi    11 年前

    documentation :

    按如下方式使用它来渲染mypartial.haml(1)或 admin/myparat.haml(2)部分,或与集合(3)&(4):

    <%= partial(:mypartial) %> <!--(1)-->
    <%= partial(:'admin/mypartial') %> <!--(2)-->
    <%= partial(:object, :collection => @objects) %> <!--(3)-->
    <%= partial(:'admin/object', :collection => @objects) %> <!--(4)-->
    

    在(1)&(2) ,部分将从其文件中呈现为纯文本, 没有本地变量(使用传递到 :本地人)。在(3)&(4) ,将呈现部分,填充 局部变量对象与集合中的每个对象。

    所以你的代码应该是:

    <div class="row">
      <div class="col-xs-3">
        <% @user.posts.each do |post| %>
          <a href="/posts/<%= post.id %>"><%= post.title %></a><br>
          <p><%= post.body %></p>
          <%= partial(:comment, :collection => post.comment) %>
        <% end %>
      </div>
    </div>
    

    使用新文件 comment.erb :

    <p><%= comment.body %></p>
    <%= partial(:comment, :collection => comment.comment) %>