我試圖建立一個RESTful應用到實際管理許多種配置的對象,所以有大量的「資源」類型的,因此很多控制器。我仍然處於POC階段,所以如果我可以在第一個導航頁面顯示所有控制器,那麼很簡單(可編程)就可以做到這一點?如何以編程方式列出Rails的所有控制器
回答
Google:'軌道列表控制器'
第一個結果。
http://snippets.dzone.com/posts/show/4792
學習有關的子類,我覺得從我的鏈接代碼可以簡單地做..
ApplicationController.subclasses.each do |c|
puts "Controller: #{c}"
puts "Actions: #{c.constantize.action_methods.collect{|a| a.to_s}.join(', ')}"
end
ApplicationController.subclasses
這將讓你開始,但請記住,在開發模式中,您不會看到太多內容,因爲它只會顯示實際加載的內容。在生產模式下啓動它,您應該看到所有控制器的列表。
您可以要求「#{RAILS_ROOT}/app/controllers」中的所有文件以開發模式填充您的列表。 – EmFi 2009-10-14 05:49:48
重要的是要注意,這是工作在生產模式,但不是在開發模式,因爲控制器是懶惰地加載。在Rails控制檯模式下啓動您的應用程序,並查看子類/後代,您將看不到任何內容。輸入其中一個控制器的名稱,然後命名的類將顯示爲子類。 ActiveAdmin似乎在這方面做得很好......您可能想要在GitHub上查看他們的代碼。 – Raels 2014-01-23 13:05:10
這不是一個完整的解決方案,因爲它沒有得到所有控制器,只有AplicationController的直接子類。如果你在層次結構中有兩個層次的嵌套,你就不會把所有的嵌套在一起。改爲使用ApplicationController.descendants。並且爲了在加載時獲得所有控制器,您可以使用Rails.application.eager_load!在您的開發或測試環境初始化程序中,但要注意它會加載所有的rails應用程序,它會減慢啓動併產生任何副作用。 – 2017-02-02 08:56:41
在Rails 3.1+:
Rails.application.routes
這會給你所有的控制器,行動和他們的路線,如果你在你的routes.rb文件的路徑。
例如:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path, controller: route.defaults[:controller], action: route.defaults[:action]}
end
更新: 對於滑軌3.2,日記引擎路徑改變,所以代碼變:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path.spec.to_s, controller: route.defaults[:controller], action: route.defaults[:action]}
end
更新: 仍在工作爲Rails 4.2.7。要提取控制器的列表(按實際問題),你可以簡單地提取控制器和uniq
controllers = Rails.application.routes.routes.map do |route|
route.defaults[:controller]
end.uniq
以下是我的來源: https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/routes.rake https://github.com/rails/rails/blob/ master/railties/lib/rails/application/route_inspector.rb 我也意識到rails爲開發模式服務器信息創建了一個內置路由,但是發現該路由僅供讀者使用。 – nurettin 2012-05-11 13:37:23
雖然@ JDL的方法將在若干情況下工作,如果你有控制器子類(例如,從ContactPageController
繼承失敗PageController
,其繼承自ApplicationController
)。
因此更好的方法是使用:
::ApplicationController.descendants
使用,如果你有一個複雜的應用程序,其中部分被抽象爲引擎routes
可能無法正常工作,這些將被隱藏。
子類不適用於活動管理員,但您的作品!謝謝 – Fedcomp 2016-06-30 10:46:45
我特別喜歡@jdl解決方案
ApplicationController.subclasses
但在我的情況下,如果我真的需要在下劃線格式的所有控制器的名字(我沒有子目錄如:/admin
)我用下面的:
Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| path.match(/(\w+)_controller.rb/); $1 }.compact
Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| (path.match(/(\w+)_controller.rb/); $1).camelize+"Controller" }
這爲我們提供了控制器的確切名稱,因爲它出現在控制器文件中。
另一種解決方案(如果你在Rails中5),並在發展和需要映射控制器和動作:
Rails.application.routes.set.anchored_routes.map(&:defaults)
你可以拒絕[:內部]如果需要的話:
.reject { |route| route[:internal] }
- 1. PHP CodeIgniter:如何以編程方式檢索所有控制器的名稱?
- 2. 如何以編程方式列出RoR引擎中的所有控制器和操作?
- 3. 如何以C編程的方式從winMain彈出控制檯?
- 4. 以編程方式列出所有黃瓜方案?
- 5. 如何以編程方式列出解決方案中的所有項目?
- 6. 以編程方式列出所有公開課程
- 7. 如何列出所有Rails 3控制器及其公共方法
- 8. 以編程方式添加生成器控制輸出塊
- 9. 以編程方式結合UITabController和UINavigation控制器http://t.co/R52RlUL以編程方式UITabController和UINavigation控制器
- 10. Swing:如何從控制器以編程方式關閉JDialog?
- 11. 如何以編程方式將naviagationController添加到tabBar控制器?
- 12. 如何以編程方式添加多個導航控制器?
- 13. 如何以編程方式從grails中刪除控制器?
- 14. 如何以編程方式添加導航控制器?
- 15. 如何以編程方式控制多顯示器設置?
- 16. 如何以編程方式導航導航控制器堆棧?
- 17. 如何以編程方式控制Windows 7混音器?
- 18. 如何以編程方式重置視圖控制器
- 19. 如何以編程方式設置視圖控制器
- 20. 如何以編程方式顯示/推動導航控制器
- 21. ASP.NET MVC以編程方式獲取控制器列表
- 22. 以編程方式檢索所有運輸方式的列表
- 23. 在SharePoint 2010中以編程方式列出所有調查?
- 24. 如何在沒有導航控制器的情況下以編程方式展開5個控制器視圖?
- 25. Vine:以編程方式控制播放
- 26. 以編程方式控制ListView CSS
- 27. openWRT:以編程方式管理控制
- 28. 以編程方式控制TPTP分析
- 29. 以編程方式複製WPF控件
- 30. 以編程方式控制鼠標
如果你將列出控制器和操作,爲什麼不使用rake路由?確保輸出很混亂,但是通過擴展終端窗口來解決這個問題。 – EmFi 2009-10-14 07:33:27
我只是放下了類似於鏈接所做的快速代碼。我記得有點練習。 – Jim 2009-10-14 08:00:34