我在'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命名空間路由
- 2. 在rails路由中的命名空間
- 3. rails中的命名空間路由1
- 4. Rails 3名稱空間路由:如何將*從*命名空間鏈接回全局名稱空間? [REVISED]
- 5. Rails 3路由和名稱空間
- 6. Rails路由錯誤與命名空間?
- 7. Rails命名空間和路由
- 8. Ruby on Rails命名空間路由
- 9. rails使用link_to命名空間路由
- 10. Rails命名空間路由 - Windows vs Linux
- 11. 的Rails 3路由錯誤(命名空間途徑幫助)
- 12. Rails的路由錯誤使用命名空間 - 的命名空間路徑
- 13. rails 3命名空間控制器和路由
- 14. Rails 3命名空間路由錯誤 - 路由存在但未起作用
- 15. 命名空間和路由
- 16. Rails 3重寫命名路由
- 17. 在rails中重命名路由3
- 18. 命名空間在沒有資源的Rails 3中的控制器路由
- 19. 命名空間路由導致惡夢
- 20. Rails 3具有變量名稱空間的路由資源
- 21. ASP.NET MVC:路由中的命名空間
- 22. 獲取資源的內部命名空間使用Rails 3路由
- 23. Rails 3路由 - 從命名空間內指定確切的控制器
- 24. 命名空間路由不工作
- 25. Rails 3命名路由 - 無路由匹配
- 26. Rails路由中的資源vs命名空間
- 27. Rails的路由混淆和命名空間
- 28. 正則表達式在rails 4中的命名空間路由
- 29. Rails的命名空間和反向路由
- 30. 命名空間中除動作之外的Rails路由
'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