我在'admin'命名空间下创建了许多控制器&视图,但它们仍然从应用程序布局中拉出。我如何制作适用于命名空间路线中所有视图的布局,并且仍然使用当前布局来处理其他页面?rails 3:命名空间路由的布局
回答
一般来说,如果没有与控制器匹配的布局,Rails将使用应用程序布局。例如,如果你有一个PeopleController,Rails会寻找layouts/people.html.erb,如果它没有找到,application.html.erb。
如果您想覆盖此约定,则可以显式指定特定布局。
class Admin::PeopleController
layout 'some_layout'
end
该控制器将然后使用some_layout.html.erb而不是找people.html.erb和application.html.erb。
但是,如果你正在寻找的东西分类,这可能是一个更好的办法:如果你有一个基地AdminController从ApplicationController继承而来,你可以有你的,比方说,管理员:: PersonController从AdminController,它继承将继承管理布局。
我不知道你的代码的细节,但你可能有:
class AdminController
def show
#render a template linking to all the admin stuff
end
end
app/controllers/admin/people_controller.rb:
class Admin::PeopleController < AdminController
#your awesome restful actions in here!
end
views/layouts/admin.html.erb:
Hello from the Admin!
<%= yield %>
的一件事意识到的是,管理员::把PeopleController将继承AdminController定义(就像任何事情任何行动在ApplicationController中定义的变量在所有子类中都可用)。这通常不是一个问题,因为无论如何,您可能会覆盖方法,但只是要意识到这一点。如果你没有AdminController,你可以创建一个没有任何操作的布局。
我通常在我的命名空间中有一个Base控制器类,然后让该命名空间中的所有控制器都从它继承。这使我可以将通用的,特定于命名空间的代码放入Base中,并且该名称空间中的所有控制器都可以利用。例如:
class Admin::BaseController < ApplicationController
layout 'admin'
before_filter :require_admin_user
end
class Admin::WidgetsController < Admin::BaseController
# inherits the 'admin' layout and requires an admin user
end
我认为这比接受的答案更优雅,更有条理。有没有办法让所有由'rails g'命令生成的控制器从Admin :: BaseController继承? – berezovskyi 2014-01-09 16:51:10
这个基地控制器应该去哪里? – Sebastialonso 2014-03-10 15:20:51
控制器类是Admin :: BaseController,因此Rails假定它将在controllers/admin文件夹的base_controller.rb文件中定义。 – IAmNaN 2014-04-16 18:45:25
- 1. rails中的命名空间路由1
- 2. Rails 3名称空间路由:如何将*从*命名空间链接回全局名称空间? [REVISED]
- 3. Rails 3路由和名称空间
- 4. Rails路由错误与命名空间?
- 5. rails使用link_to命名空间路由
- 6. Rails的路由错误使用命名空间 - 的命名空间路径
- 7. rails 3命名空间控制器和路由
- 8. Rails 3命名空间路由错误 - 路由存在但未起作用
- 9. 命名空间和路由
- 10. Rails 3重写命名路由
- 11. 命名空间路由导致恶梦
- 12. ASP.NET MVC:路由中的命名空间
- 13. Rails 3具有变量名称空间的路由资源
- 14. Rails 3路由 - 从命名空间内指定确切的控制器
- 15. Rails - 配置/路由中的命名空间设置?
- 16. 正则表达式在rails 4中的命名空间路由
- 17. 干掉路由中的rails命名空间
- 18. Rails的路由混淆和命名空间
- 19. rails 3名称空间资源路由异常
- 20. Rails 3路由 - URL名称?
- 21. Laravel命名空间路由未找到
- 22. Rails控制器命名空间继承缺少布局
- 23. Rails 2.3.8:命名空间+默认路由(服务器相关路由问题)
- 24. 轨道3命名路由
- 25. 使用命名空间路由时的路由错误
- 26. Rails 2命名空间和浅层路由问题
- 27. 命名空间路线中的未命名空间路线
- 28. 将命名空间管理路由更改为根路由
- 29. 命名空间路由文件提供了路由错误
- 30. 名称空间控制器无需命名空间路由帮助程序
'class AdminController'在'app/controllers'或'app/controllers/admin'下面? – jdscosta91 2013-08-31 00:37:27
在'app/controllers'下 – Damien 2013-09-21 14:05:50
我正在尝试这个,它似乎工作,但我失去了像Bootstrap或Semantic-UI这样的框架给出的样式和功能。任何想法如何解决这个问题? – Sebastialonso 2014-03-10 19:02:07