文系エンジニアのブログ

文系20代後半からWEB系エンジニアを目指す

【rails】deviseを使った時の共通レイアウト部分の変更方法

railsでdeviseで作成したviewに対してlayout/application.html.erb以外の共通レイアウトを使いたい場合の指定方法を調べたので記事にします。
(例えばapplication.html.erbに共通のヘッダーやフッターなどを指定しているが、ログインや新規登録画面では表示させたくない場合など)

ステップ1

例えばapp/views/layoutsディレクトリ以下にapplication.html.erbの代わりになるようなsub-layout.html.erbといったファイルを作成します。(名前は何でもいいです)

ステップ2

次にapp/controllers/application_controller.rbに以下のように記述をするだけになります。

class ApplicationController < ActionController::Base
  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      "sub-layout"
    else
      "application"
    end
  end
end

これで作業完了です。
すごく簡単なので初心者がスピードあげて実装できるように簡単な記事どんどん書いていこうと思います。

参考

github.com