ror restful rails ruby-on-rails routes ruby-on-rails-3.1 rails-routing rails-engines

ruby on rails - restful - Listado de "rutas de rake" para un motor Rails 3.1 montable



routes in ruby on rails (6)

En caso de que a la gente le falte en los comentarios, a partir de Rails 3.2.2 , ahora puede usar

$ rake app:routes

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

Creé el motor usando:

$ rails plugin new rails_blog_engine --mountable

Y editó el archivo ''test / dummy / config / route'' para leer:

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

... y ''config / route'' para leer:

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

Quiero enumerar las rutas generadas para '': posts'', pero no está claro cómo puedo hacer esto. Cuando ejecuto ''aplicación rake: rutas'', solo obtengo la ruta "/ blog":

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

Cuando ejecuto "rutas de rake", aparece un error:

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

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


En los rieles 3.2X Si está en su "host_app" y ha montado un motor, probablemente podría enumerar las rutas ejecutando (debería funcionar fuera de la caja):

bundle exec rake engine_name:routes


Para los rieles del motor 3.x, las rake routes no funcionan bajo la raíz del motor (es por eso que necesita un poco de copia al copiar el archivo de rake). Sin embargo, las rake routes funcionan bajo prueba / dummy (o spec / dummy si se usa rspec). Enumera todas las rutas que pertenecen al motor en desarrollo y otros motores montados.


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

Rieles 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 puedes llamar como

$rake engine_routes ENGINE="IssueTracker::Engine"


Si copia código de la tarea de rutas de rake de Rails 3.1.0 en su Rakefile y cambia la parte superior para leer:

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 ejecutando:

rake routes

Tenga en cuenta que en Rails 3.1.1 y versiones posteriores, necesitará una versión más reciente de la tarea de rutas de rake .


en Rails 5, podría obtener las rutas del motor usando el siguiente comando:

bundle exec rake app:routes