Devise使ってログイン前とログイン後のレイアウトを切り替える

Deviseを使っていて、ログイン前はサイドバーなしでログイン後はサイドバー見せるようにしたいなー、どうしたらいいのかなーと思って、適当にやってみたらダメだった。

# 適当にやったコード
class ApplicationController < ActionController::Base
  protect_from_forgery
  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_url, :alert => exception.message
  end

  layout ((current_user.nil?) ? "single" : "application")
end

current_userというメソッドはないと言われて撃沈。
ここでは使えないようである。ぐぬぬ。

ということでググってみたらいい方法があった。
stackoverflow: How to render login page without a layout?

class ApplicationController < ActionController::Base
  protect_from_forgery
  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_url, :alert => exception.message
  end

  layout :layout

  private

  def layout
    is_a?(Devise::SessionsController) ? "single" : "application"
  end
end

Devise::SessionControllerならばsingleをレイアウトに指定する。それ以外はapplication(デフォルト)を指定するという方法である。とてもクール!


カテゴリー Ruby, Ruby on Rails | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です