Перечисление 'граблей-маршрутов' для монтируемого движка Rails 3.1 - PullRequest
21 голосов
/ 15 сентября 2011

Я работаю над монтируемым движком для использования с Rails 3.1 и хочу перечислить маршруты движка.

Я создал двигатель, используя:

$ rails plugin new rails_blog_engine --mountable

И отредактировал файл 'test / dummy / config / routs', чтобы прочитать:

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

... и 'config / маршруты', чтобы читать:

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

Я хочу перечислить маршруты, сгенерированные для ': posts', но не ясно, как я могу это сделать. Когда я запускаю 'rake app: маршруты', я получаю только маршрут "/ blog":

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

Когда я запускаю 'rake маршруты', я получаю сообщение об ошибке:

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

Как я могу увидеть маршруты для ': posts'? Могу ли я сделать это без переписывания соответствующих задач по рейку?

Ответы [ 6 ]

21 голосов
/ 03 декабря 2012

В случае, если людям не хватает его в комментариях, начиная с Rails 3.2.2, теперь вы можете использовать

$ rake app:routes
11 голосов
/ 15 сентября 2011

Если вы копируете код из стандартной задачи Rails 3.1.0 rake router в свой файл Rakefile и изменяете верхнюю часть следующим образом:

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

... заменяя RailsBlogEngine наимя вашего движка, тогда вы можете получить элементарный список маршрутов, выполнив:

rake routes

Обратите внимание, что в Rails 3.1.1 и новее вам понадобится более новая версия граблеймаршруты задача.

3 голосов
/ 08 декабря 2013

Для движка rails 3.x, rake routes не работает под корнем движка (поэтому требуется копирование файла rake).Однако rake routes работает в режиме test / dummy (или spec / dummy, если используется rspec).В нем будут перечислены все схемы, относящиеся к разрабатываемому двигателю и другим установленным двигателям.

2 голосов
/ 22 января 2015

для рельсов 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"
1 голос
/ 07 июня 2017

в Rails 5 я мог получить маршруты двигателя, используя следующую команду:

bundle exec rake app:routes
0 голосов
/ 29 сентября 2015

в рельсах 3.2X Если вы находитесь в «host_app» и смонтировали движок, вы, вероятно, могли бы перечислить маршруты, выполнив (должно работать из коробки):

bundle exec rake engine_name:routes
...