レンダリングの処理の流れとレイアウト宣言
June 24, 2020
こんちには、たわらです。
本記事では、rails のレンダリングの処理の流れをまとめました。
ネームスペースを使用して、管理画面の画面表示を作成しているときに、こんがらがってしまったので、整理します。
ざっくりこんな処理の流れになってる
1 URL にアクセスがある
2 対応するコントローラーのアクションが作動する
3 アクションは reder メソッドで、何がしかのテンプレートを表示しようとする。
ただ、アクション名と同じ erb または slim フィアルがあれば、記載しなくてもレンダリングしてくれます。
new.html.erbがあるとき、def new; endだけでもレンダリングしてくれる。すごい!
4 【コントローラーは同じ基本名を持つレイアウトをapp/views/layoutsに探しにいく】
ここの理解が欠如していましたね。。。
PhotosControllerクラスのアクションから出力するのであれば、app/views/layouts/photos.html.erbまたはapp/views/layouts/photos.builderを探します。
5 【なければapplication.htmlを使用する】
rails new で作ったアプリだと、これを参照することになっているはずです。
6 application.htmlのなかの<%= yeild %>に、アクションに対応したテンプレートを挿入する
コントローラーごとのページレイアウトを変えるには layout 宣言を利用する
たとえば、管理者用のページは既存のレイアウトとは変えたい場合があります。
なので、コントローラー別でページレイアウトを変えるには、コントローラーが探しにいくレイアウトを予め指定してあげればよい、というわけですね。
layout宣言を使用することで、デフォルトのレイアウト名ルールを上書きすることができます。例:
class ProductsController < ApplicationController
layout "inventory"
#...
end
この宣言によって、
ProductsControllerからの出力で使用されるレイアウトはapp/views/layouts/inventory.html.erbになります。
最後に
基礎的な理解がスッキリすると見通しがたってよいですね。
読んでくださったかた、ありがとうございます。