20

Estoy trabajando en un motor montable para usar con Rails 3.1, y quiero enumerar las rutas del motor.Listado de 'rutas de rastrillo' para un motor Rails 3.1 montable

creé el motor usando:

$ rails plugin new rails_blog_engine --mountable 

y editado el archivo 'prueba/maniquí/config/rutas' para leer:

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

... y 'config/rutas a' leo:

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

Quiero que las rutas generadas por '': mensajes, pero no es claro cómo puedo hacer esto. Cuando corro 'App rastrillo: rutas', me sale sólo el "/ blog" ruta:

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

cuando corro 'rake routes', me sale un error:

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

¿Cómo puedo ver las rutas para ': publicaciones'? ¿Puedo hacer esto sin reescribir las tareas de rake relevantes?

+6

Ahora, en Rails 3.2.2, 'aplicación rastrillo: routes' funciona bien.Un simple '' rake routes' arroja el mismo error, pero eso es lo que se espera. – Zabba

+0

Al escribir un motor hoy, me encontré con este problema, ¡y me di cuenta de que tuve el mismo problema hace 3 años! (ref mi comentario anterior) Algunas cosas nunca cambian, ¿eh? :) – Zabba

Respuesta

11

Si copia el código de los rieles estándar 3.1.0 rake routes tarea en su Rakefile, y cambiar la parte superior para que diga:

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

... reemplazando RailsBlogEngine con el nombre de su motor, entonces puede obtener una lista rudimentaria de rutas mediante la ejecución:

rake routes 

Tenga en cuenta que en Rails 3.1.1 y posteriores, tendrá una tarea newer version of the rake routes.

+1

Gracias! Trabajó para mi. Parece extraño que esto no se incluya de la caja. –

20

En caso de personas han desaparecido en los comentarios, a partir de Rails 3.2.2, ahora se puede utilizar

$ rake app:routes 
3

Para rieles del motor 3.x, rake routes no funciona bajo la raíz del motor (por eso se necesita un poco de truco copiando el archivo de rake). Sin embargo, rake routes funciona bajo prueba/dummy (o spec/dummy si se usa rspec). Enumerará todos los pathes que pertenecen al motor en desarrollo y otros motores montados.

1

Para carriles 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 

Carriles 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 

Entonces se le puede llamar como

$rake engine_routes ENGINE="IssueTracker::Engine" 
+0

Gracias ... de esto pude averiguar cómo acceder a la ruta url_helpers desde el motor, para su ejemplo '" IssueTracker :: Engine ".constantize.routes.url_helpers' con el que pude' enviar' dinámicamente al ayudante de ruta que necesitaba. – erroric

-1

En los carriles 3.2x Si se encuentra en que "host_app" y tienen montado un motor que probablemente podría enumerar las rutas mediante la ejecución (debe funcionar de la caja):

bundle exec rake engine_name:routes 
1

en los carriles 5, que podría conseguir las rutas del motor usando el siguiente comando:

bundle exec rake app:routes 
Cuestiones relacionadas