コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsのerbで使われる記号の意味

意外とパターンすくないのでまとめてみた

記号別意味(パーセント/だいなり/しょうなりの表記は省略)

<% %>(パーセントのみ)

出力が伴わないがRubyのコードとして操作したいときに使う。 if文で処理を分岐させる場合などに使う

<% if @show_text == true %>
  <p> フラグがたったときのテキスト </p>
<% end %>

変数セットなどもできるがあまり良い使い方ではないので使わないほうが良い

<!-- このテンプレートを使う場合は変数を必ずtrueにする -->
<% @show_text = true %>

<%= %>(イコール)

記述の内容を出力する。

controller内で以下の記述をして

@name = "Taro"

erbで下記の記述をすると

<p><%= @name %></p> 
<p>Taro</p>

と出力される

<%== %>(イコールイコール)

= が1個だけの場合はエスケープ処理をするが、2個つけるとエスケープ処理をしない。

<% @text = "<b>bolds html</b>" %>
<%= @text %>

と記載した場合

&lt;b&gt;bolds html&lt;/b&gt;

上記のようにエスケープされるが

<% @text = "<b>bolds html</b>" %>
<%== @text %>

とすると

<b>bolds html</b>

設定した文字列まま出力される。

<%= -%>(イコールで終端にマイナス)

後ろのが改行を取り除いて出力。

<% @text = " c\nd\ne\n" %>
ab
<%= @text %>
fg

と記述すると以下のように出力されるが

ab
c
d
e

fg

- をつけると

<% @text = " c\nd\ne\n" %>
ab
<%= @text -%>
fg
ab
c
d
e
fg

最後の改行がtrimされる。

<%# %>(シャープ)

コメントアウト、何も出力されない

<% @text = "cde" %>
ab<%# @text %>fg

と書いても

abfg

だけ表示される。

もちろんコード処理も省かれるので

<%# @text = "c" %>
ab<%= p @text.nil? %>fg

と書くと

abtruefg

と出力される。本当にデバッグ用途にしか使えなそう。

HTMLと同等のもの

<!-- -->(びっくり/エクスクラメーション、マイナス)

HTMLのコメントアウト、ただコメントアウトはHTMLだけなので下記のように書くと

<% @text = "text" %>
<!-- <%= "#{@text} tests" %> -->

と記述すると

<!-- text tests -->

と表示される

参考リンク