在Ruby on Rails中缩进整个yield输出2个空格?

时间:2013-07-28 09:41:51

标签: ruby-on-rails ruby formatting

为了好看的代码,有没有办法在Ruby on Rails中的整个布局<%= yield %>中添加间距选项卡?这就是我的意思:

:此:

# layout.html.erb
<body>
  <%= yield %>
</body>

加上:

# page.html.erb
<h1>Test</h1>
<p>Hello, world!</p>

输出:

<body>
  <h1>Test</h1>
<p>Hello, world!</p>
</body>

我真正想要输出的内容:

<body>
  <h1>Test</h1>
  <p>Hello, World!</p>
</body>

我做了一些研究,发现使用像<%= yield -%>这样的减号删除缩进,但我找不到添加它的方法。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这个怎么样?

# layout.html.erb
<body>
<%= yield.gsub(/^/, "  ") %>
</body>

实际上,我在自己的库中有一个方法String#indent,例如:

class String
  def indent s = "\t"; gsub(/^/, s) end
end

使用它,您可以在不同的地方重复使用它。

# layout.html.erb
<body>
<%= yield.indent %>
</body>

答案 1 :(得分:0)

根据Sawa的回答,我发现了一种稍微灵活的缩进内容方法。虽然Sawa的上述方法运行得很好,但如果你在<%= yield %>之前处理多个块级别,它就不会将你的产量代码推出足够的空间。

这是一个小的改进,可以根据具体需求进行定制:

class String
  def indent(spaces)
    num = (" " * spaces)
    gsub(/^/, num)
  end
end

现在,您可以在布局中指定缩小的缩进空间,如下所示:

# layout.html.erb
<body>
  <div class="content">
    <%= yield.indent(4) -%>
  </div>
</body>

上面的示例将为您的每个产量线应用4个缩进空格。如果有另一个级别,你可以将它改为6,依此类推......