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(デフォルト)を指定するという方法である。とてもクール!