22

我正在尝试设计以在某些方面显示与默认设置不同的布局模板。

当用户进入登录页面时,我有这个工作,但我需要显示不同的布局来注册、忘记密码和重置。

这是我的应用程序控制器中的当前代码:

layout :layout

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

3 回答 3

64

如果您将备用布局命名为 devise.html.erb,那么 gem 的控制器自然会使用它,而无需询问。节省一些代码。

于 2013-08-08T18:42:23.353 回答
44

将这行代码添加到您的 application.rb 中:

config.to_prepare do
    Devise::SessionsController.layout "your_layout_name"
    Devise::RegistrationsController.layout "your_layout_name"
    Devise::ConfirmationsController.layout "your_layout_name"
    Devise::UnlocksController.layout "your_layout_name"
    Devise::PasswordsController.layout "your_layout_name"
end

如果您希望所有 Devise 视图具有相同的布局,除了用户正在编辑其数据时,您可以使用以下内容:

config.to_prepare do
  Devise::SessionsController.layout "your_layout_name"
  Devise::RegistrationsController.layout proc{ |controller| user_signed_in? ? "application" : "your_layout_name" }
  Devise::ConfirmationsController.layout "your_layout_name"
  Devise::UnlocksController.layout "your_layout_name"            
  Devise::PasswordsController.layout "your_layout_name"        
end

有关更多信息,您可以阅读这篇文章

于 2012-06-18T15:10:42.503 回答
1

您不需要自己处理布局,只需执行以下操作:

rails generate devise:views

然后,查看views文件夹中的devise文件夹,你会看到你需要自定义的所有表单

于 2012-06-18T12:23:20.197 回答