2010-08-14 10 views

Respuesta

13

otra persona podría tener un camino más corto para hacer esto, pero si usted está evaluando una URL, entonces ir a la clase

ActionController::Routing::RouteSet para un config.routes.rb

map.resources :sessions 

el código para encontrar es :

ActionController::Routing::Routes.recognize_path('/sessions/new', {:method => :get}) 
#=> {:controller => 'sessions', :action => 'new'} 

derecha:

ActionController::Routing::Routes.recognize_path('/sessions/1/edit', {:method => :get}) 
#=> {:controller => 'sessions', :action => 'edit', :id => 1} 

incorrecto - sin la method que se añade de forma explícita, tomará por omisión partido a /:controller/:action/:id:

ActionController::Routing::Routes.recognize_path('/sessions/1/edit') 
#=> {:controller => 'sessions', :action => '1', :id => 'edit'} 

Si está dentro de la acción y le gustaría saber, es un poco más fácil llamando params[:action]

todo lo que siempre quiso saber sobre el juego de rutas se puede encontrar aquí: http://caboo.se/doc//classes/ActionController/Routing/RouteSet.html#M004878

Espero que ayude!

+0

me gusta su idea. ¿Por qué does: route_set.recognize_path (app.edit_foo_path (1)) return: {: controller => "foos",: action => "1",: id => "editar"} Certanly, rails sabe que la acción es editar, y la identificación es 1, no vise-versa? – SooDesuNe

+0

parece coincidir en '/ controller/action/id' en lugar de la ruta RESTful. Probando, pude hacer que funcione correctamente al pasar siempre el método, sin el método, siempre va a los valores predeterminados. También edité la publicación, en su lugar, quiere usar 'ActionController :: Routing :: Routes'. –

22

con los carriles 3 que puede hacer:

Rails.application.routes.recognize_path('/areas/1') 
=> {:controller=>"areas", :action=>"show", :id=>"1"} 
Cuestiones relacionadas