23

我正在开发用于 Rails 3.1 的可安装引擎,我想列出引擎的路线。

我使用以下方法创建了引擎:

$ rails plugin new rails_blog_engine --mountable

并编辑了“test/dummy/config/routes”文件以读取:

Rails.application.routes.draw do
  mount RailsBlogEngine::Engine => "/blog"
end

...和“配置/路线”阅读:

RailsBlogEngine::Engine.routes.draw do
  resources :posts
end

我想列出为 ':posts' 生成的路由,但不清楚我该如何做到这一点。当我运行“rake app:routes”时,我只得到“/blog”路由:

$ rake app:routes
rails_blog_engine    /blog    {:to=>RailsBlogEngine::Engine}

当我运行“rake routes”时,出现错误:

$ rake routes
rake aborted!
Don't know how to build task 'routes'

我怎样才能看到':posts'的路线?我可以在不重写相关 rake 任务的情况下做到这一点吗?

4

6 回答 6

24

如果人们在评论中遗漏了它,截至Rails 3.2.2,您现在可以使用

$ rake app:routes
于 2012-12-03T07:22:31.347 回答
11

如果您将标准 Rails 3.1.0 rake routes任务中的代码复制到您的 Rakefile 中,并将顶部更改为:

task :routes => 'app:environment' do
  Rails.application.reload_routes!
  all_routes = RailsBlogEngine::Engine.routes.routes

...用您的引擎名称替换 RailsBlogEngine,然后您可以通过运行获得基本的路线列表:

rake routes

请注意,在 Rails 3.1.1 及更高版本中,您需要更新版本的 rake routes任务。

于 2011-09-15T14:57:02.740 回答
3

对于 rails 3.x 引擎,rake routes在引擎的根目录下不起作用(这就是为什么它需要通过复制 rake 文件进行一些破解)。但是rake routes在 test/dummy 下工作(如果使用 rspec,则在 spec/dummy 下工作)。它将列出属于正在开发的引擎和已安装的其他引擎的所有路径。

于 2013-12-07T22:54:13.737 回答
3

用于导轨 3

 desc 'Print out all defined routes inside engine  match order, with names. Target specific controller with CONTROLLER=x.'
  task engine_routes: :environment do
    Rails.application.reload_routes!
    app = ENV['ENGINE'] || "Rails.application"
    all_routes = app.constantize.routes.routes
    require 'rails/application/route_inspector'
    inspector = Rails::Application::RouteInspector.new
    puts inspector.format(all_routes, ENV['CONTROLLER']).join "\n"
  end

导轨 4

 desc 'Print out all defined routes inside engine match order, with names. Target specific controller with CONTROLLER=x.'

  task engine_routes: :environment do
   app = ENV['ENGINE'] || "Rails.application"
   all_routes = app.constantize.routes.routes
   require 'action_dispatch/routing/inspector'
   inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
   puts inspector.format(ActionDispatch::Routing::ConsoleFormatter.new, ENV['CONTROLLER'])
  end

然后你可以打电话给

 $rake engine_routes ENGINE="IssueTracker::Engine"
于 2015-01-22T08:05:47.567 回答
1

在 Rails 5 中,我可以使用以下命令获取引擎的路线:

bundle exec rake app:routes
于 2017-06-07T09:23:05.693 回答
-1

在 rails 3.2X 如果你在你的“host_app”中并且已经安装了一个引擎,你可能可以通过执行列出路线(应该开箱即用):

bundle exec rake engine_name:routes
于 2015-09-29T17:12:02.423 回答