LoginSignup
8
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-13

通常は 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 とすることもできますが、お勧めはできませんね。

8
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2