Help us understand the problem. What is going on with this article?

ERB や Slim などのテンプレートエンジンの partial でうまく早期リターンする

More than 3 years have passed since last update.

通常は partial の先頭で以下のように記述します。

<%# @condition が未設定の場合は、 partial の内容全体をレンダリングしない %>
<% return unless @condition %>

<div>
  早期リターンしなかったときの記述内容
</div>

ただ、 partial の途中で早期リターンしたいこともあるかと思います。その際に以下のように記述しても、早期リターン前の記述内容は最終的に出力されません。

<div>
  早期リターン前の記述内容
</div>

<%# @condition が未設定の場合は、 partial の内容全体をレンダリングしない %>
<% return unless @condition %>

<div>
  早期リターンしなかったときの記述内容
</div>

この場合は以下のように記述します。

<div>
  早期リターン前の記述内容
</div>

<%# @condition が未設定の場合は、 partial の内容全体をレンダリングしない %>
<% return self.output_buffer unless @condition %>

<div>
  早期リターンしなかったときの記述内容
</div>

self.output_bufffer にそれまでの実行結果が保存されていて、それを返すわけですね。
return output_buffer だけでも良いかと思って検証しましたが、どうもローカル変数として定義されているようで nil が返ります。
@output_buffer とすることもできますが、お勧めはできませんね。

takakiNG
aktsk
株式会社アカツキは、スマートフォンゲームの企画開発を中心に事業を展開しております。創業以来全てのゲームを内製しているため、高い技術ノウハウが蓄積されています。今後は、新規事業の立ち上げも行ってまいります。
http://aktsk.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away