fugafuga.write

日々のログ

パーフェクト Ruby on Rails 2章 まとめ View編

読んだので反復

blog.tokoyax.com blog.tokoyax.com

これらの続き

レンダリングの仕組み

render メソッドをコントローラから呼び出してビューを描出する。

テンプレートの検索

render メソッドでやっていること。

  • 描画するためのテンプレートを探す
  • 探されたテンプレートを基に、データを展開してHTMLを生成する

テンプレートの検索規約

RAILS_ROOT/app/views/コントローラ名/アクション名.html.erb

render メソッドは省略可能。
その場合、アクション名のテンプレートが使用される。

コンテンツタイプによって表示を出し分ける

HTML以外に、JSONやCSVでレスポンスを返すことができる。
respond_to ブロックを使う。

respond_to do |format|
  format.html
  format.json
  format.csv
end

この場合、各フォーマット用のテンプレートファイルを用意する必要がある。

RAILS_ROOT/app/views/コントローラ名/アクション名.html.erb
RAILS_ROOT/app/views/コントローラ名/アクション名.json.erb
RAILS_ROOT/app/views/コントローラ名/アクション名.csv.erb

リダイレクト

redirect_to アプリケーションのパス or URL

partial テンプレート と layout

render メソッドには、:partial オプションがある。
テンプレートで共通の部分を切り出して、それを描画できる。

共通で切りだされたテンプレートは、パーシャルテンプレートと呼ばれ、先頭が「_」で始まるファイル名にする必要がある。

メタタグ、ヘッダー、フッターなどのサイトのレイアウトに関わるテンプレートは、app/views/layouts/ 配下に置く。
ここに置かれるテンプレートは、<html>, <head>, <body> などのタグが書かれている。

特定のレイアウトを指定する場合、render メソッドの :layout オプションを使うか、コントローラのlayout宣言を使う。

variants によるテンプレートの切り替え

条件によってテンプレートを切り替える機能。
PCとモバイルのテンプレートを切り替えるなど。
コントローラ内で、request.variant:tablet:mobile などの値を入力すると、
表示するテンプレートが、index.html+tablet.erbindex.html+mobile.erb のように変化する。

テンプレートエンジン

ERB

Rubyに標準添付されているテンプレートエンジン。 JSPのようなもの。

HTMLはそのまま書く。 <% ... %> で Rubyの構文を書く。
<%= ... %> で Rubyで書かれた構文の中の値を出力。

<ul>
  <% 3.times do |n|  %>
    <li>Number = <%= n %></li>
  <% end  %>
</ul>

Haml

HTMLの構造をシンプルなインデントで表現したテンプレートエンジン。
gem パッケージとしてインストールできる。

gem 'haml'
または
gem 'haml-rails'

haml-rails は、テンプレートジェネレーターが生成するテンプレートエンジンを変更したい場合に使う。

HTMLは、% をつける。
閉じタグは不要。
Rubyの構文は、- を先頭につける。
構文の終わりを表す end は不要。
Rubyの値の出力は、= をつける。

%html
  %head
    %title Hi
  %body
    %h1#header Header
    - 3.times do |i|
      %p Item
      %p= i

Slim

Hamlと同じようにインデントベースのテンプレートエンジン。
Hamlよりも簡潔に書ける。
そして高速である。

gem パッケージで導入できる。

gem 'slim'
または
gem 'slim-rails'

Railsのジェネレーターなどで使用したい場合、slim-rails を使う。

HTMLは、括弧無しで書く。
あとはHamlとほぼ同じ。

doctype html
html
  head
    title Hi
  body
    h1 id="header" Header
    - 3.times do
      p Item

ヘルパー

ヘルパーとは、データの表示フォーマットを指定したり、よく使うビューのパーツを簡単に構築できるようにできるもの。

url_for

Webアプリのパス構築ヘルパー。
コントローラ名、アクション名、パラメータから適切なパスを選択して出力してくれる。

form_tag/form_for

フォーム構築ヘルパー。
form_tag は、単純なフォームを作るときに使う。
form_for は、モデルの情報を基に対応するフィールドの内容を埋めたり、エラー表示できる。

stylesheet_link_tag / javascript_include_tag

スタイルシートやJavascriptのタグを表示するときに使う。
Asset Pipelineに関する対応もしてくれる。

distance_of_time_in_words_to_now

ある時刻と現在時刻とのあいだにどの程度開きがあるかをわかりやすく表示してくれる。

number_with_delimiter

長い数字に、自動的に区切りの記号を入れてくれる。

独自ヘルパー

ヘルパーを自分で作ることができる。
app/helpers 配下に、ヘルパーモジュールを格納する。

エスケープ処理

XSSなどの攻撃を防ぐ。
Rails の機能として、エスケープ機能は標準で実装されている。
タグが全てエスケープされるので、タグを出力したい場合、raw というヘルパーを使う必要がある。

APIサーバーにとってのビューについて

RailsをAPIサーバーとして、JSONなどを返す場合、JSONを構築するのがビューの仕事になる。
JSONを構築するgemとして、jbuilderがあるのでそれを使う。

rails new をした時点で、Gemfileの設定に jbuilder gem を利用する設定になっている。

app/views/models/show.jbuilder.json というファイルをテンプレートして利用する。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

パーフェクトRuby on Rails

パーフェクトRuby on Rails