Create  Edit  Diff  FrontPage  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

ActionView

ActionView::Base

原文

ActionViewのテンプレートを書くためには、二つの方法が用意されています。もしテンプレートファイルが".rhtml"という拡張子を持つ場合、それはERb(Rubyに標準添付されています)のテンプレートとして処理されます。また、テンプレートファイルが".rxml"という拡張子を持つ場合、Jim WeirichによるBuilder::XmlMarkupが用いられます。

ERb

ERbによる出力は<% %> や <%= %>といったタグによって制御されます。 この二つの違いは、<% %>の場合は内部の評価結果が出力されず、<%= %>の場合はそれが出力されるという点です。

例えば、次のコードはnameに対するループとみなされます。

 <b>Names of all the people</b>
 <% for person in @people %>
   Name: <%= person.name %><br/>
 <% end %>

ループは(<% %>)タグ内のスクリプトによって制御され、nameは(<%= %>)タグによって出力されています。ただし、putsやprintといった標準出力に対する出力メソッドを用いた次のようなスクリプトはERbのテンプレートとして動作しません。

 Hi, Mr. <% puts "Frodo" %>

(もしどうしてもERbタグの内部で出力を行いたい場合は、TextHelper#concatを用いることができます。)

Using sub templates

サブテンプレートを用いることで、退屈なテンプレートの複製を回避し、共通に用いられるテンプレートをまとめあげることができます。典型例としてWebサイトのHeader/Footerが挙げられます。

 <%= render "shared/header" %>
 Something really specific and terrific
 <%= render "shared/footer" %>

このように、renderメソッドを用います。renderメソッドはサブテンプレートのレンダリング結果を文字列で返します。それにより、出力は現在のテンプレート(実行したテンプレート)に埋め込まれます。

しかし、用いることのできるサブテンプレートは静的なものだけではありません。テンプレート(サブテンプレート)はインスタンス変数を共有するので、これを用いてサブテンプレートをの出力を動的に変更することができます。

 <% @page_title = "A Wonderful Hello" %>
 <%= render "shared/header" %>

例えばこのように書いておくと、@page_titleを"shared/header"サブテンプレートから用いることができます。"shared/header"が

 <title><%= @page_title %></title>

となっている場合、サブテンプレートは

 <title>A Wonderful Hello</title>

と出力されます。

Passing local variables to sub templates

ローカル変数をハッシュを用いてサブテンプレートに渡すことができます。ハッシュのキーには変数の名前を文字列で指定し、値には任意のオブジェクトを指定します。

 <%= render "shared/header", { "headline" => "Welcome", "person" => person } %>

このように書くと、"shared/header"からは以下のようにアクセスできます。

 Headline: <%= headline %>
 First name: <%= person.first_name %>

Template caching

Builder

Last modified:2005/05/11 15:08:54
Keyword(s):
References: