モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

Rails3ビューテンプレートの基本的な使用方法 (Ruby)

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/07/25
最終更新最終更新
2016/09/21
記事区分記事区分
一般公開

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("あいうえお") %>
Likeボタン(off)0
詳細設定を開く/閉じる
アカウント プロフィール画像

学生(?)エンジニア

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

>>さらに詳しくステッカーを贈る
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    ログインする

    関連記事

    • レイアウトおよび部分テンプレートに関するまとめ (Rails4)
      レイアウトおよび部分テンプレートはどちらもテンプレート (*.html.erb) に共通の要素をまとめておき、任意のテンプレートから利用できるようにしておくための仕組みです。フッターやヘッダーといった大枠はレイアウト、小さなパーツは部分テンプレートというイメージで使い分けましょう。 レイアウトの使用方法 クラス毎に指定する方法と、アクション毎に指定する方法があります。 app/views/layo...
      taro三世taro三世9/21/2016に更新
      いいねアイコン画像0
    • Ruby コードスニペット (正規表現)
      sample.rb str = "001: This is a string." var1,var2 = 2,3 # 'EOS'とすると#{}による変数展開がなされない (%03dは展開される) doc = (<<"EOS" % var1) # 括弧は省略可。要は<<"EOS"の次の行からEOSまで。(参: <<-"EOS"とすると前に空白...
      だいふくうさぎだいふくうさぎ4/13/2018に更新
      いいねアイコン画像0
    • OAuthを用いずにTwitterに自動投稿する (回数制限あり, Selenium with Ruby)
      Seleniumを用いて、OAuthを用いずにTwitterに自動投稿するRubyスクリプトを記述してみます。連続で複数回実行すると、ボット判定としてキャプチャ認証が発生します。その認証までは通過できませんので悪しからず。また、Twitterの仕様変更次第ではDOMの構造が変化するため、下記サンプルは機能しなくなる恐れが有ります。 twitter_post.rb #!/usr/bin/ruby r...
    • Ruby における日本語のエンコーディング
      日本語を含めて多言語対応する際には、Asciiコード以外の文字コードセットが必要になります。日本語が主となる場合、よく使われる文字セットにはUnicode, Shift_JIS, EUC-JPがあります。このうち Unicode だけは特殊であり、世界中のあらゆる文字を収録しようとしていることから 1 文字を表現するために必要なバイト数が大きくなってしまっています。そのため Unicode のうち...
      だいふくうさぎだいふくうさぎ3/21/2017に更新
      いいねアイコン画像0
    • ビューヘルパーの作成方法 (Rails4)
      事前準備 $ rails generate scaffold myModel field1:string field2:integer field3:date field4:boolean $ rake db:migrate config/application.rb module MyApp class Application < Rails::Application ... ...
      クロクロ9/21/2016に更新
      いいねアイコン画像0