■Controllerから値を受け渡す
では、Viewテンプレートをいろいろと使ってみることにしましょう。まずは、ControllerのアクションメソッドからViewテンプレートに必要な値を受け渡してみます。
下のリスト欄にサンプルコードを掲載しておきました。実際にページにアクセスしてみてください。indexメソッドで@msg変数に設定したテキストがページに表示されます。@msgの値をいろいろと書き換えて動作を確認してみましょう。
ここでは、Controllerのアクションメソッドで、@msgというインスタンス変数に値を設定しています。そしてその値を、そのままViewテンプレート側で、<%= @msg %>というようにして出力しています。このように、Controllerのアクションメソッドでインスタンス変数を用意すれば、それがそのままViewテンプレート側でも利用できるようになります。
「なんだ、Controllerのメソッドで用意した変数がそのままViewテンプレートで使えるのか」と思うかも知れませんが、これは微妙に違います。そのまま使えるのは、クラスのインスタンス変数として用意したものだけです。普通の変数(@のついてないもの)をController側で用意しても、それらはViewテンプレートでは使えないので注意してください。
また、テンプレートにはRubyのスクリプトを直接記述して動かすことも出来ます。これは、<% %>というタグを使います。このタグ内にスクリプトを記述しておくことで、テンプレートのロード時にそれが実行されるのです。ここではTime.nowで日時オブジェクトを作成し、そのテキストを変数strにとり出しています。
取り出した値は、その後で<%= str %>として出力しています。テンプレートの内部では、インスタンス変数ではない普通の変数も、このようにタグを超えて利用することができます。
テンプレートに書かれたスクリプトは、全体を通して1つのスクリプトとして働きます。小さなスクリプトがタグごとに分かれて動いているわけではないのです。この「テンプレート内にあるすべてのスクリプト用タグは、全体として1つのスクリプトとして動く」という点はしっかり理解しておきましょう。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
※helos_controller.rbのソースコード
# coding: utf-8
class HelosController < ApplicationController
def index
@msg = "どもども!"
end
end
※index.html.erbのソースコード
<h1>Helo#index</h1>
<p><%= @msg %></p>
<%
d = Time.now
str = d.to_s
%>
<%= str %>

記事のリストに戻る