Rails3ビューテンプレートの基本的な使用方法 (Ruby)
[履歴] [最終更新] (2014/06/17 21:40:07)

概要

Railsでは、ERB (eRuby (テキストファイルにRubyスクリプトを埋込む書式の仕様) をRubyで実装したもの) を用いてHTML内にRubyスクリプトを埋込むことができます。

  • <% %>で囲むと出力されません (if-elseなど制御構文を記述します)
  • <%= %>で囲むとエスケープ出力されます
  • <%== %>で囲むとエスケープされずにそのまま出力されます
  • <%# %>で囲むとコメントになります

if-elsif-else

条件分岐が埋込めます。

app/views/main/index.html.erb

<% var=128 %>
<% if var < 256 %>
var is less than 256.
<% elsif var > 256 %>
var is greater than 256.
<% else %>
var is equal to 256.
<% end %>

繰り返し処理

app/views/main/index.html.erb

<% (0..10).each do |i| %>
  Count: <%= i %><br />
<% end %>

コントローラからの値渡し

app/controllers/main_controller.rb

class MainController < ApplicationController
  def index
    @var = 128
  end
end

app/views/main/index.html.erb

<%= @var %>

エスケープについて (XSS等への対策)

<%= %> で囲むと'<'や'>'などがすべてエスケープされます。<%== %>で囲むとエスケープされずにそのまま出力されます。

app/views/main/index.html.erb

<%= "<script>alert()</script>" %>

出力されるHTML

&lt;script&gt;alert()&lt;/script&gt;

'<'や'>'をすべてエスケープするのではなく、悪意ある可能性のあるコードが無効化されるように必要最低限のものをエスケープするためには、sanitizeメソッドを使用します。

app/views/main/index.html.erb

<%== sanitize("This is safe. <script>alert()</script><a href="">link<a>") %>

出力されるHTML

This is safe. <a href="">link<a>

URLエンコーディング

url_encodeメソッド (またはそれを短縮したuメソッド) を使用します。ファイル保存時の文字コードでURLエンコーディングされることに注意しましょう。

app/views/main/index.html.erb

<%= u("日本語") %>
<%= url_encode("あいうえお") %>
関連ページ
    概要 Rails における ERB と同様に、Spring Boot でもテンプレートエンジンを利用できます。今回は特に Thymeleaf (タイムリーフ) のサンプルコードを、こちらのページで構築した環境をもとにまとめます。 公式ドキュメント Serving Web Content with Spring MVC