Ответ 1
Если вы скопируете код из стандартного Rails 3.1.0 более новая версия трассировки маршрутов.
Я работаю над монтируемым движком для использования с Rails 3.1, и я хочу перечислить маршруты двигателей.
Я создал движок, используя:
$ rails plugin new rails_blog_engine --mountable
И отредактировал файл 'test/dummy/config/routes' для чтения:
Rails.application.routes.draw do
mount RailsBlogEngine::Engine => "/blog"
end
... и 'config/routes' для чтения:
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 aborted!
Don't know how to build task 'routes'
Как я могу увидеть маршруты для: сообщений? Могу ли я сделать это, не переписывая соответствующие задачи рейка?
Если вы скопируете код из стандартного Rails 3.1.0 более новая версия трассировки маршрутов.
В случае, если люди не замечают этого в комментариях, начиная с Rails 3.2.2
, вы можете использовать
$ rake app:routes
Для движка rails 3.x rake routes
не работает под корневым корнем (для чего ему нужен хак, копируя файл рейка). Однако rake routes
работает под тестом/манекеном (или spec/dummy при использовании rspec). В нем будут перечислены все шаблоны, которые принадлежат двигателю разработки и другим установленным двигателям.
Для рельсов 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"
в Rails 5, я мог бы получить маршруты двигателя, используя следующую команду:
bundle exec rake app:routes
В рельсах 3.2X Если вы находитесь в "host_app" и монтируете движок, вы можете, вероятно, перечислить маршруты, выполнив (должен работать из коробки):
bundle exec rake engine_name:routes