在我的应用中,我希望在用户登录时使用不同的布局,而不是
application_controller:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
layout :determine_layout
private
def determine_layout
user_signed_in? ? 'application' : 'landing'
end
end
但是这段代码不起作用:布局没有变化。可以设计导致这个吗?或者我犯了一些错误?
谢谢!
答案 0 :(得分:1)
准备写评论,但在这里处理起来会更容易:
根据Devise github wiki,您可以确定它是否基于devise_controller
:
class ApplicationController < ActionController::Base
layout :layout_by_resource
protected
def layout_by_resource
if devise_controller?
"layout_name_for_devise"
else
"application"
end
end
end
如果用户未登录,这将允许您将用户指向sessions#landing
,这意味着在自定义Devise会话控制器中创建新操作
这会干扰确定他们是否登录的过程(如果他们没有登录,他们可以看到来自Devise的session
或registrations
控制器的静态视图/ p>