2010-08-14 3 views

risposta

13

qualcun altro potrebbe avere una via più breve per fare questo, ma se si sta solo valutando un URL, poi si va al ActionController::Routing::RouteSet classe

per un config.routes.rb

map.resources :sessions 

il codice per trovare è :

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

destra:

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

sbagliato - senza la method essere esplicitamente aggiunti, per impostazione predefinita partita a /:controller/:action/:id:

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

Se siete entro l'azione e vorreste sapere, è un po 'più facile chiamando params[:action]

qui puoi trovare tutto ciò che hai sempre desiderato sapere su: set: http://caboo.se/doc//classes/ActionController/Routing/RouteSet.html#M004878

Spero che questo aiuti!

+0

Mi piace la tua idea. Perché: route_set.recognize_path (app.edit_foo_path (1)) ritorno: {: controller => "foos",: action => "1",: id => "edit"} Certanly, i binari sanno che l'azione è edit, e l'id è 1, non viceversa? – SooDesuNe

+0

sembra corrispondere su '/ controller/action/id' invece della rotta RESTful. Test, sono stato in grado di farlo funzionare correttamente passando sempre il metodo, senza il metodo - va sempre al default. Ho anche modificato il post, preferisci utilizzare "ActionController :: Routing :: Routes". –

22

Con Rails 3 si può fare:

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