[英]Change layout for Devise controllers
我正在使用gem devise
。 Devise扩展了应用程序控制器,并向Rails应用程序添加了用户管理。
当我查看宝石内部时,可以看到以下行
class Devise::SessionsController < ApplicationController
我要更改此设置,因为我希望Devise控制器继承自名为AdminController
自定义控制器。 原因是我已经完成了整个Web应用程序,并且我不希望页面的admin部分使用我的应用程序布局,css,js ...
如何动态更改控制器的基类? 或者动态告诉控制器使用admin.html.erb
布局而不是application.html.erb
布局。
当我说“动态”时,我的意思是猴子打补丁,谢谢。
Devise是Rails引擎 。 我认为,使网站的管理部分最好的方法是制作Rails引擎。 或者最好还是使用rails_admin或activeadmin 。 他们都是铁路引擎。关于铁路引擎的铁轨
我不知道您应用的内部功能,但是如果您添加
layout "admin"
到您的AdminController并将自定义管理布局添加到view / layouts文件夹,其中
<%= stylesheet_link_tag 'admin' %>
<%= javascript_include_tag "admin"%>
AdminController视图将使用管理样式表和javascript
这解决了我的问题,如果控制器的名称空间是Devise
使用管理员布局。
class ApplicationController < ActionController::Base
protect_from_forgery
layout :determine_layout
def determine_layout
module_name = self.class.to_s.split("::").first
return (module_name.eql?("Devise") ? "admin" : "application")
end
end
如果只需要更改布局,我认为您应该可以通过重新打开控制器类来做到这一点。 在initializers/devise.rb
的底部(在顶层的config部分下面,您可以编写:
Devise::SessionsController.layout :admin
我没有尝试过,但是从理论上讲应该可以使用,因为布局只是ActionController.base上的类方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.