2010-09-08 22 views
17

¿Puedo obtener todas las rutas en mi aplicación de rieles? Necesito una salida como rake routes y pongo el resultado en una matriz.¿cómo obtener todas las rutas en mi aplicación de rieles?

¿Es posible? ¿cómo?

+1

¿Dónde necesita esta salida? – jordinl

+2

Para Rails 3: 'Rails.application.routes.routes.to_a' (ver [mi respuesta original] (http://stackoverflow.com/a/10576105/407213)) – Dorian

Respuesta

15

Puede echar un vistazo a los rieles de camino que escupen las rutas de la tarea de rake. Está en /gems/rails/2.3.x/lib/tasks/routes.rake para Rails 2. Parece que básicamente está haciendo ActionController::Routing::Routes.routes en el caso general y luego lo interroga.

+2

Para Rails 4 ahora está en la gema railties – Neikos

10

Bueno, independientemente de donde lo necesite, se puede hacer:

routes = `rake routes`.split("\n") 

O incluso:

routes = `rake routes`.split("\n").map{ |r| r.gsub(', ', ',').split(' ') } 
5

Con el fin de difundir el dolor de cabeza que se fue a acomplish que, lo hice basado en @jordini respuesta:

Rails.application.routes.routes.to_a.each do |rota| 
    if rota.app.instance_variable_defined? '@defaults' 
     perm = Permission.where({ 
     :acao => rota.defaults[:action], 
     :controller => rota.defaults[:controller], 
     :verbo => rota.verb.source.to_s.gsub("^","").gsub("$","").downcase 
    ).first_or_create 
    end 
end 

Esto es lo que he usado para crear todos los permisos para mi página web a la vez.

Cuestiones relacionadas