【Ruby on rails】ビュー(erbファイル)で動的な処理が実装できる

2019年4月8日

Ruby on railsの勉強を始めてすぐ、コントローラのアクションから呼び出されるビューの拡張子が「.erb」という聞き慣れないものである事に気が付きました。

今回はerbファイルについて調べてみたので、分かったことを備忘録として記しておこうと思います。

コントローラからビューの呼び出し

ルーティングが呼び出すコントローラとアクションを制御する
ルーティングが呼び出すコントローラとアクションを制御する

上図のように、検索バーにURLを入力してからビューが表示されるまでには、ルーティングでコントローラの管理がされ、コントローラのアクションメソッド名と同じ名前のビューファイルが呼び出されるのでした。

この時、ビューファイルはHTMLで実装されるのですが、HTMLのみで実装されたファイルであれば、静的な画面を返却することしかできません。

HTMLで書かれた静的なページ

<h2>ご来店ありがとうございます</h2>
<p>こちらは一般ステージのお客様専用ページです。</p>
HTMLでは静的なページしか表示できない
HTMLでは静的なページしか表示できない

しかし内容によってはブラウザから受け取った情報によって表示内容を変えたい場合もあるかもしれません。

その度にHTMLファイルを用意するのは面倒だし、メンテナンスも大変ですが、こういった場面では、「erbファイル」に動的な処理を実装することが出来るのです。

動的な処理の実装方法

erbファイルにはRuby言語で書かれたコードを埋め込むことができます。

これは例えばDBを読んだ結果、購入履歴のあるお客様の場合には、画面に「毎度ありがとうございます」と表示するなど、内容によって出力の形式を変えることができ、とても便利だと感じています。

Rubyのソースコードを埋め込むためには、erbファイルに<% 〜 %>とタグで囲ってタグとタグの間にRuby言語での記述を行います。

※この場合演算はされますが、処理結果は表示されません。

また、<%= %>で囲った場合は演算の結果を表示することが出来ます。

よって、<% %>は演算や条件文、<%= %>は表示したい変数などと使い分ける必要があります。

Rubyの「DRY」原則とレイアウトファイル

Rubyには、ソースやドキュメントなどあらゆる成果物において重複を無くし、メンテナンスが汎用的に行えるよう、DRY原則(Don’t Repeat Yourself: 繰り返すべからず)と呼ばれる原則があります。

特にビューには「レイアウトファイル」(application.html.erb)が存在しており、個々のビューファイルに定義された内容よりもレイアウトファイルの定義が優先されます。

home.html.erb

<% provide(:title, "Home") %>
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
  </head>
application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>SampleApp</title>

上記のようになっていた場合、titleには”Home”ではなく、”SampleApp”と表示されます。