1

<%= yield %>コードの見栄えを良くするために、Ruby on Railsのレイアウト全体に間隔のタブを追加する方法はありますか? これが私が意味することです:

これ:

# 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 -%>インデントが削除されることがわかりましたが、それを追加する方法が見つかりませんでした. 何か案は?

4

2 に答える 2

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>
于 2013-07-28T09:58:22.697 に答える
0

Sawaの回答を拡張すると、コンテンツをインデントするためのもう少し柔軟なアプローチが見つかりました。上記の Sawa の方法は問題なく機能しますが、 の前に複数のブロック レベルを処理している場合、yield コードを十分なスペースにプッシュしません<%= yield %>

特定のニーズに合わせてカスタマイズできるわずかな改善点を次に示します。

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

次のように、レイアウトから直接必要なインデントのスペース数を指定できるようになりました。

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

上記の例では、yield のすべての行に 4 つのスペースのインデントが適用されます。別のレベルがあれば、それを 6 などに変更します...

于 2013-07-28T13:44:29.847 に答える