tawara's blog

雑記。個人の見解です。

レンダリングの処理の流れとレイアウト宣言

こんちには、たわらです。

本記事では、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を探します。

railsguides.jp

5 【なければapplication.htmlを使用する】

 rails newで作ったアプリだと、これを参照することになっているはずです。

6 application.htmlのなかの<%= yeild %>に、アクションに対応したテンプレートを挿入する

コントローラーごとのページレイアウトを変えるにはlayout宣言を利用する

たとえば、管理者用のページは既存のレイアウトとは変えたい場合があります。

なので、コントローラー別でページレイアウトを変えるには、コントローラーが探しにいくレイアウトを予め指定してあげればよい、というわけですね。

layout宣言を使用することで、デフォルトのレイアウト名ルールを上書きすることができます。例:

class ProductsController < ApplicationController
  layout "inventory"
  #...
end

この宣言によって、ProductsControllerからの出力で使用されるレイアウトはapp/views/layouts/inventory.html.erbになります。

railsguides.jp

最後に

基礎的な理解がスッキリすると見通しがたってよいですね。

読んでくださったかた、ありがとうございます。