Life & Style

ruby-on-rails-view

Ruby on RailsのView(ユーザーインターフェイス)には、「ERB」というテンプレートエンジンを利用するのが基本だ。

「ERB」とは、Embedded Rubyの略で、HTMLの中にRubyのプログラムを埋め込む事ができる。

「ERB」の様な技術をテンプレートエンジンと呼び、テンプレートエンジンは他にもBuilder、JBuilderなど、様々なものが存在するが、Railsでは「ERB」を標準で利用できる。

「ERB」で書かれた、Rubyのコードが含まれたHTMLは、ユーザーに表示される前に、RubyやRuby on Railsによって処理され、最終的にHTMLとしてユーザーに表示される仕組みだ。

ERBの利点

任意のRubyプログラムを埋め込めるため、条件分岐や繰り返し構文などの処理が自由に記述できる。

また、ビューヘルパーを使用する事でデータベースから取得した値に基づいたリンクやフォーム要素をシンプルなコードで生成できる。

ビューヘルパーとはビュー生成のためのユーティリティメソッドであり、Railsが標準で用意してくれている。

テンプレートファイルの作成

テンプレートファイルは/app/viesフォルダ配下に「コントローラー名/アクション名.html.erb」という名前で作成する必要がある。(rails gコマンドでcontrollerを作成時に一緒に作成されている)

例えば、usersコントローラーのindexアクションに対応するテンプレートの場合、「/users/index.html.erb」を作成する。

このルールに従う事によって、Railsはコントローラーのアクションメソッドを実行した後、対応するテンプレートを実行してくれる。

つまり、コントローラーのアクションから、描画するViewのファイルを指定する様な記述を、開発者が行う必要がないのだ。

Rubyプログラムの記述方法

HTMLにRubyのプログラムを埋め込むには「<%任意のコード%>」や「<%=何らかの値を返す式%>」を使用する。

例えば、実用性はあまりないが、10 + 1をViewの中で計算して出力するプログラム。

<p>Hello, World!</p>
<p>
  <%= 10 + 1 %>
</p>

「<%…%>」この「%」で囲われた中がRubyの世界となる。

「%=…%」イコールがついていると、ページに値が表示される。

イコールがない場合は、コードは評価されるだけで値を返さない。if文など、画面に出力する必要がない場合に使用する。

この場合、画面には11が表示されるが、イコールを取ると、表示されない。

Controllerの値をViewに渡す

MVCモデルでは、Viewは描画に関する記述を行う場所であるため、できる限り、Viewに描画以外の処理を書かない方が、メンテナンス性が高くなる。

複雑な計算などのロジックはコントローラー、またはモデルに記述する。

class HelloController < ApplicationController
  def index
    @num = 10 ; 1
  end
end

変数の先頭に@をつけると、インスタンス変数になる。

インスタンス変数はクラスのインスタンスに保持される変数であり、インスタンス変数はViewからもアクセスができる。

つまり、コントローラーの値をVIewに渡す事ができる。

コントローラーで計算した値をインスタンス変数@numに入れ、その値をViewで出力する。

<p>Hello, World!</p>
<p>
  <%= 10 + 1 %>
</p>
<p>
  <%= @num %>
</p>

PICK UP

  • コメント ( 0 )

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。