プログラミングガール

Developing a better me

Rails|レイアウトを新規で作成する

なにがしたい

Viewを表示する際に、「layout.html.erb」とは別のレイアウトを作成して適応したい。

シチュエーション

hana-ori.hatenablog.com

上記の方法でerror画面をカスタマイズすると、Viewに対応するコントローラーがないため、「Template Inheritance※」ができない。
そのため、error画面を出す際、メタ情報や読み込むCSSの内容が変わるためレイアウトを別に用意したい。

※ 例)errors配下に_meta.html.erbを切り、application.html.erb内で以下のように呼び出す。

<%= render partial: 'meta' %>

HOW TO

1.view/layout/error_layout.html.erbを作成
2.application.controllerのエラーページをレンダリングしている箇所で、error_layout.html.erbを指定する

def render_404(exception = nil)
    if exception
      logger.info "Rendering 404 with exception: #{exception.message}"
    end
    render template: "errors/error_404", status: 404, layout: 'application'
    render template: "errors/error_404", status: 404, layout: "error_layout" #error_layout.html.erbを指定する
  end

  def render_500(exception = nil)
    if exception
      logger.info "Rendering 500 with exception: #{exception.message}"
    end
    render template: "errors/error_50x", status: 500, layout: 'application'
    render template: "errors/error_50x", status: 500, layout: "error_layout" #error_layout.html.erbを指定する
  end