Rails&设计:如何在没有布局的情况下渲染登录页面?

时间:2010-12-10 18:25:40

标签: ruby-on-rails devise

我知道这可能是一个简单的问题,但我仍然试图想出Devise ...

我想在登录页面上render :layout => false;如何使用Devise完成此操作?

3 个答案:

答案 0 :(得分:102)

您可以对控制器进行子类化并将路由器配置为使用:

class SessionsController < Devise::SessionsController
  layout false
end

config/routes.rb

devise_for :users, :controllers => { :sessions => "sessions" }

您还需要将会话视图移动到此控制器。

app/controllers/application_controller.rb中制作方法:

class ApplicationController < ActionController::Base

  layout :layout

  private

  def layout
    # only turn it off for login pages:
    is_a?(Devise::SessionsController) ? false : "application"
    # or turn layout off for every devise controller:
    devise_controller? && "application"
  end

end

答案 1 :(得分:36)

您还可以在app / views / layouts / devise中创建sessions.html.erb文件。然后,该布局将仅用于登录屏幕。

答案 2 :(得分:7)

使用devise_controller?帮助您可以确定Devise控制器何时处于活动状态并做出相应响应。要让Devise对应用程序的其余部分使用单独的布局,您可以执行以下操作:

class ApplicationController < ActionController::Base
  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      "devise"
    else
      "application"
    end
  end
end

在您的视图/布局中创建一个devise.html.erb文件

因此,如果它的设备控制器将呈现设计布局,那么应用程序布局

来自:https://github.com/plataformatec/devise/wiki/How-To:-Create-custom-layouts