更改设计默认布局

Pau*_*ane 14 layout ruby-on-rails devise

我正在尝试设计从某些方面的默认值中显示不同的布局模板.

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

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

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
Run Code Online (Sandbox Code Playgroud)

zol*_*ter 36

将这行代码添加到您的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
Run Code Online (Sandbox Code Playgroud)

如果您希望所有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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请阅读本文


ste*_*och 33

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

  • 这是显示实现此目标的所有可能方法的文档:https://github.com/plataformatec/devise/wiki/How-To:-Create-custom-layouts (3认同)
  • 对于任何感兴趣的人来说,这之所以有效,是因为 Rails 的魔力,Rails 尝试找到与控制器同名的布局来使用它。https://api.rubyonrails.org/classes/ActionView/Layouts.html#module-ActionView::Layouts-label-Layout+assignment (2认同)