読んだので反復
レンダリングの仕組み
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.erb や index.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 というファイルをテンプレートして利用する。
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/10/31
- メディア: Kindle版
- この商品を含むブログ (1件) を見る