Rails&Devise:如何在没有布局的情况下呈现登录页面?

nee*_*zer 54 ruby-on-rails devise

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

我想render :layout => false在我的登录页面上; 我怎么能用Devise做到这一点?

iai*_*ain 103

您可以将控制器子类化并配置路由器以使用它:

class SessionsController < Devise::SessionsController
  layout false
end
Run Code Online (Sandbox Code Playgroud)

并在config/routes.rb:

devise_for :users, :controllers => { :sessions => "sessions" }
Run Code Online (Sandbox Code Playgroud)

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

制作方法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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢; 你的第二种方法正是我想要的! (2认同)
  • 第二次检查应该是`!devise_controller?&&"application"`注意那里的`not`.但否则这就像一个魅力:) (2认同)

Pau*_*ach 36

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


小智 8

通过使用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
Run Code Online (Sandbox Code Playgroud)

在视图/布局中创建devise.html.erb文件

因此,如果它的设备控制器将渲染设计布局,否则应用程序布局

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