2010-04-26 15 views
5

Sto cercando il metodo per l'analisi di percorso percorso in questo modo:Percorso di analisi in rotaie

ActionController::Routing.new("post_path").parse 
#=> {:controller => "posts", :action => "index"} 

Dovrebbe essere opposto a url_for

Upd
ho scoperto: What is the opposite of url_for in Rails? A function that takes a path and generates the interpreted route?

ActionController::Routing::Routes.recognize_path("/posts") 

Quindi ora ho bisogno di convertire posts_path in "/ messaggi"

risposta

5
C'è

c'è questo metodo:

>> ActionController::Routing::Routes.recognize_path("/posts/") 
=> {:action=>"index", :controller=>"posts"} 

Se avete solo una stringa con il percorso (come "posts_path"), allora credo che nel contesto si sta utilizzando questo si dovrebbe essere in grado fare

ActionController::Routing::Routes.recognize_path(send("posts_path".to_sym)) 

btw questo è stato educare anche per me :)

+0

ah che hai fatto la maggior parte del lavoro da soli :) –

+1

Thx:) quindi cos'è 'send (: post_path)'? – fl00r

+0

è come si chiamano i metodi con un nome arbitrario in ruby ​​:) in questo caso, se si ha una stringa come '" posts_path "', e si desidera ottenere il valore del metodo 'posts_path', invece, basta fare 'send ("posts_path") '(non è nemmeno necessario convertire in simbolo). è un concetto di base nel rubino, è meglio che tu lo conosca :) –

12

In Rails 3 è possibile effettuare le seguenti operazioni:

Rails.application.routes.recognize_path "/accounts/1" 
# {:action=>"show", :controller=>"accounts", :id=>"1"} 

Uso ActionController::Routing::Routes.recognize_path mantenuto gettando

ActionController :: RoutingError Eccezione: Nessuna corrispondenza di percorso "/ account/1

+0

Nota anche questo funziona con URL completi: 'Rails.application.routes.recognize_path 'http: // example.com/accounts/1'' – tee