レンダリングの処理の流れとレイアウト宣言
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
になります。
最後に
基礎的な理解がスッキリすると見通しがたってよいですね。
読んでくださったかた、ありがとうございます。