如何以编程方式列出RoR引擎中的所有控制器和操作?

时间:2010-11-11 01:07:12

标签: ruby-on-rails

这个问题是对此讨论中提出的问题的延伸:How to programmatically list all controllers in Rails

似乎大多数列出应用程序控制器和操作的解决方案都使用导入和解析#{RAILS_ROOT} / app / controllers。

我一直在构建和使用位于#{RAILS_ROOT} / vendor / plugins /

中的RoR引擎

如何列出每个引擎的控制器和动作?

2 个答案:

答案 0 :(得分:2)

奇怪的是,如何写出问题可以帮助你解决问题。通过运行:

简单地包含引擎的控制器,我能够实现这一点
Find.find(File.join(RAILS_ROOT, 'vendor/plugins/'))  { |name|  
    require_dependency(name) if /_controller\.rb$/ =~ name
}

答案 1 :(得分:0)

这很老了,rails 3改变了很多东西。事情发生了变化,我不得不经历三种不同的方式。目前在rails 3.2.2上这是我最好的解决方案:

Rails.application.reload_routes!
all_routes = Rails.application.routes.routes

require 'rails/application/route_inspector'
inspector = Rails::Application::RouteInspector.new
for routeRule in inspector.format(all_routes, ENV['CONTROLLER'])
    # Parse routeRule to get your values
end