如何在浏览器中查看rails引擎的rails / routes

时间:2017-01-23 09:13:56

标签: ruby-on-rails

我有一个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列出它们,但我的正常工作流程是在浏览器中列出它们。如何在浏览器中列出引擎路由?

2 个答案:

答案 0 :(得分:5)

如果您只想在开发模式下在浏览器中显示您的路线,可以调用一个rails页面:

http://localhost:3000/rails/info/routes(自Rails 4开始提供)

如果你从rails 3升级,你可以从你的宝石中删除六分仪宝石,因为它现在是rails core的一部分。

如果要向用户显示生产中的路线,可以像下面这样实现:(在bin/rake routeshere中实现)您可以从代码中调用相同的东西:)

尝试1:

控制器代码:

# 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))

尝试2:

在帮手中做到这一点:

# 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)

尝试3:

这是“最便宜”的方式:

# 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,这是时间了!