目的
- あんまりわかっていないビューファイル(HTML)内にRubyのコードを書く時の<% %>と<%= %>の違いをまとめる
簡単に言うと?
- ビューファイルが司るWebページ(以降、Webページと記載する)内に表示したいものは<%= %>の中に記載する。
- Webページに表示したくないものは<% %>の中に記載する。
ちょっとだけ詳しく言うと?
- <%= %>は中に書かれた内容を実行し、結果を評価し、文字として出する。
- <% %>は中に書かれた内容を実行する。
使い分けは?
- あまり難しい事は考えず、ビューファイルに記載するRubyのメソッドやコードの結果をそのWebページに表示したいのか、表示したくないのかで判断する。
- 例えば、とあるテーブル情報を
モデル名.all
で取得し、each文で取得内容を全て出力したいときの変数名A.each do |変数名B|
の処理はWebページに出力する必要はないので<% %>で囲む。 - 前述の処理で変数Bに入った内容をWebページに出力したいときは<%= %>で囲む。
書き方の例
-
変数Aにはとあるデータベースのとあるデータが格納されているものとする。
-
変数Bの内容をWebページに出力したい。
-
each文を使用した書き方の例を下記に記載する。
<!-- 下記の処理は出力したくないので<% %>で囲む --> <% each.変数A do |変数B| %> <!-- 変数Bを出力したいので<%= %>で囲む --> <%= 変数B %> <!-- each文の終了を意味するendも出力したくないので<% %>で囲む --> <% end %>
より具体的な例
-
usersにはuserテーブルのすべてのデータが格納されているものとする。(
users = User.all
を実行した状態) -
userの内容をWebページに出力したい。
-
each文を使用した書き方の例を下記に記載する。
<!-- 下記の処理は出力したくないので<% %>で囲む --> <% each.users do |user| %> <!-- userを出力したいので<%= %>で囲む --> <%= user %> <!-- each文の終了を意味するendも出力したくないので<% %>で囲む --> <% end %>