AWDwR "Chapter17 Action View"

11月中に読み終わらなかったよ。ってこれだけサボってちゃなぁ…。しかもChapter17は46ページもあるし…。

奥さんAction Viewですよ。

Templates

テンプレートはデフォルトではapp/views/[コントローラ名]/[アクション名+拡張子]になるんだけど、以下のように直接指定することもできる。

render(:action => 'action_name')
render(:template => 'controller/name')
render(:file => 'dir/template')

コントローラのインスタンス変数はテンプレートからアクセスできるし、headers, params, request, response, sessionといったアクセッサも利用できる。またコントローラオブジェクト自体はcontrollerという変数にセットされる。

Builder Template

ビルダテンプレートはXMLを生成するテンプレート。拡張子は.rxml。

RHTML Templates

html_escape()でテンプレート内で出力する文字列をエスケープできて、h()と省略できる。<%=とタイプしたらすぐにh(とタイプする癖をつけましょう。

他にsanitize()というメソッドがあって、これは<form>タグ、<script>タグをエスケープし、on=という属性とjavascript:で始まるリンクを削除してくれる。

Helpers

ビューを助けるメソッドを定義したモジュールがヘルパ。コントローラがBlogControllerという名前ならヘルパモジュールの名前はBlogHelperとなる。でもgenerate controllerを実行するとヘルパも自動的に作ってくれるからあまり気にしなくてもOK。

module StoreHelper
  def page_title
    ...
  end
end

<h3><%= page_title %></h3>

全てのビューから利用できるヘルパはapplication_helper.rbに定義する。また以下のようにして使用するヘルパをコントローラ内で指定することも可能。

class ParticularController < ApplicationController
  helper :date_format
end

class ParticularController < ApplicationController
  helper DateFormat
end

今日は短めで。