我有一个rails引擎,使用
安装在dummy/config/routes.rb
中
mount Handicap::Engine => "/handicap"
在引擎中,我有许多控制器,当我在虚拟目录中启动rails服务器时,这些路由是活动的,例如/差点/发球台/指数回应。但是,当我转到/rails/routes
时,它只会显示:
handicap_path /handicap Handicap::Engine
rails_routes_path GET /rails/routes(.:format) sextant/routes#index
sextant_engine_path /sextant Sextant::Engine
我可以使用rake routes
列出它们,但我的正常工作流程是在浏览器中列出它们。如何在浏览器中列出引擎路由?
答案 0 :(得分:5)
如果您只想在开发模式下在浏览器中显示您的路线,可以调用一个rails页面:
http://localhost:3000/rails/info/routes(自Rails 4开始提供)
如果你从rails 3升级,你可以从你的宝石中删除六分仪宝石,因为它现在是rails core的一部分。
如果要向用户显示生产中的路线,可以像下面这样实现:(在bin/rake routes
(here中实现)您可以从代码中调用相同的东西:)
控制器代码:
# app/controllers/example_controller.rb
routes = Rails.application.routes.routes
@inspector = ActionDispatch::Routing::RoutesInspector.new(routes)
查看代码:
# app/views/example/show.html.erb
# Yeah! There's also a HTML Table Formatter already to print routes in html
inspector.format(ActionDispatch::Routing::HtmlTableFormatter.new(self))
在帮手中做到这一点:
# app/helpers/route_printing_helper.rb
module RoutePrintingHelper
def print_routes(view)
routes = Rails.application.routes.routes
inspector = ActionDispatch::Routing::RoutesInspector.new(routes)
inspector.format(ActionDispatch::Routing::HtmlTableFormatter.new(view))
end
end
然后叫它:
# app/views/example/show.html.erb
print_routes(self)
这是“最便宜”的方式:
# app/controllers/example_controller.rb
@routes_output = `#{Rails.root}/bin/rake routes`
您的观点:
# app/views/example/show.html.erb
<pre><%= @routes_output %></pre>
答案 1 :(得分:0)
我解决了这个问题,线索是:
sextant_engine_path /sextant Sextant::Engine
这表明我的Gemfile中仍然有sextant gem。 Sextant是在rails 3中实现这一目标的方式,正如siegy22所指出的那样,自导轨4以来就不需要它。解决方案只是将六分仪从gemfile中取出。鉴于该项目是在轨道5,这是时间了!