2010-02-08 15 views
8

Cerveau un peu frit .... Comment puis-je obtenir un hachage du: contrôleur et: action d'un relatif_path?Quel est le contraire de url_for dans Rails? Une fonction qui prend un chemin et génère l'itinéraire interprété?

C'est fondamentalement le contraire d'url_for. Dans l'exemple ci-dessous, "some_function" est le nom de la fonction mystère que je cherche ... Je sais que c'est facile, je ne me souviens pas ou je ne peux pas le trouver dans les docs.

Comme si:

some_function('/posts/1/edit') 
=> {:controller => 'posts', :action => 'edit', :id => '1'} 
+0

Are '' controller.action_name' et contrôleur .controller_name' est-il suffisant? Ou avez-vous vraiment besoin de manipuler des chemins relatifs génériques depuis l'extérieur de votre contrôleur/action actuel? –

+0

Je le fais ... malheureusement. Merci quand même. – btelles

Répondre

9

Rspec a une méthode 'params_for', qui utilise des méthodes de routage du contrôleur d'action pour analyser les chemins avec des méthodes dans les routes.

leur est un peu plus robuste que cela, mais cela se résume à:

def params_for(path, method) 
    params = ActionController::Routing::Routes.recognize_path(path, :method => method) 
end 
+0

Vous pouvez obtenir un avertissement de désapprobation en utilisant ActionController :: Routing :: Routes –

+0

Veuillez fournir le lien source pour la méthode 'params_for' – zykadelic

+1

' Rails.application.routes.recognize_path' fonctionne avec Rails 3.2 – zykadelic

8

Avec Rails 3 La meilleure façon est d'utiliser

Rails.application.routes.recognize_path('/posts/1/edit') 
+0

Qu'en est-il de Rails 4? –