【问题标题】:How to write partial ERB template in Sinatra? [closed]如何在 Sinatra 中编写部分 ERB 模板? [关闭]
【发布时间】:2014-04-25 18:14:29
【问题描述】:

如何重构这段代码?我在 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

这是我的迁移模型评论

【问题讨论】:

  • 好像是codereview.stackexchange.com的问题。
  • 而且,我不明白它的标题。
  • 我想使用 block 或 lambda 重构代码,但不知道如何
  • 你为什么要检查评论是否为blank? .each 即使在一个空的集合对象上也可以工作,它不会做任何事情。

标签: ruby sinatra erb


【解决方案1】:

来自documentation

如下使用它来渲染 mypartial.haml(1) 或 admin/mypartial.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) %>

【讨论】:

  • 非常感谢您的帮助,我不会猜到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
相关资源
最近更新 更多