Rails:不同的布局

时间:2014-01-28 21:12:31

标签: ruby-on-rails ruby-on-rails-4

在我的应用中,我希望在用户登录时使用不同的布局,而不是

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

但是这段代码不起作用:布局没有变化。可以设计导致这个吗?或者我犯了一些错误?

谢谢!

1 个答案:

答案 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的sessionregistrations控制器的静态视图/ p>