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

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を探します。

https://railsguides.jp/layouts_and_rendering.html#%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E6%8E%A2%E7%B4%A2%E9%A0%86%E5%BA%8F

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

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

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

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

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

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

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

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

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

https://railsguides.jp/layouts_and_rendering.html#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E7%94%A8%E3%81%AE%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B

最後に

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

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