5.2 レイアウト・テンプレート・パーシャル

アプリ全体の共通レイアウトを定義する

デフォルト何も指定しない場合はapp/views/layouts/application.html.erbがレイアウトとして適応されます。

特定のコントローラーなどでレイアウトを変更したい場合はlayoutメソッドを使います。

class PostsController < ApplicationController
  layout 'admin'

  def new
    @post = Post.new
  end
end

上記の例だとadminというレイアウトが呼ばれます。

フォーマット指定をする

respond_toメソッドを使ってフォーマットを指定することができます。これによりフォーマットごとのテンプレートが呼ばれます。

class PostsController < ApplicationController
  def index
    @posts = Post.all
    respond_to do |format|
      format.html
      format.xml  { render xml: @posts }
      format.json { render json: @posts }
    end
  end
end

フォーマットとして指定できる形式は以下になります。

フォーマット
html HTML
xml XML
json JSON
rss RSS
atom ATOM
yaml YAML
text TEXT
js JavaScript
css CSS
cvs CVS
ics ICS

パーシャルでよく使う部分を再利用する

パーシャルを使うことでよく使うビューのパーツを切り出し、再利用することができます。

パーシャルのファイル名は名前の最初に_がつきます。

app/views/shared/_title.html.erb

<h1>RailsCookBook<h1>

上のパーシャルはh1タグを出力するパーシャルです。これを出力したいときは、ビューの中でrenderメソッドを使います。 引数にはファイルのパスを指定します。

<%= render 'shared/title' %>

パーシャルに変数を渡す

パーシャルの内部では変数を利用することも可能です。パーシャルを呼び出す時に変数の値を指定します。

app/views/shared/_title.html.erb

<h1><%= lang %>CookBook<h1>

上の例ではパーシャル内にlangという変数を定義しました。これに値を入れるには呼び出し時に、以下のようにします。

<%= render 'shared/title', lang: 'Python' %>

変数の名前をキーに代入する値をハッシュの値にしてrenderメソッドの引数にします。

コレクションを表示する

配列などでeachをしてその都度パーシャルを読み込むとパフォーマンスがよくありません。 パーシャルには配列を一括で描画する機能があります。

app/views/shared/_title.html.erb

<h1><%= lang %>CookBook<h1>

上のパーシャルで複数の言語を一括で描画したい時、以下のようになります。

<%= render partial: 'shared/title', collection: ['Python', 'PHP', 'Go'], as: :lang %>

results matching ""

    No results matching ""