2010-02-08 4 views
8

Brain ist ein wenig gebraten .... Wie bekomme ich einen Hash von: Controller und: Aktion von einem relativen Pfad?Was ist das Gegenteil von url_for in Rails? Eine Funktion, die einen Pfad nimmt und die interpretierte Route generiert?

Dies ist im Grunde das Gegenteil von url_for. Im Beispiel unten ist "some_function" der Name der Mystery-Funktion, nach der ich suche ... Ich weiß, dass es einfach ist, ich kann mich nicht daran erinnern oder scheint es in der Lage zu sein, es in den Dokumenten zu finden.

Wie so:

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

Sind zu verwenden 'controller.action_name' und' Controller .controller_name' ausreichend? Oder müssen Sie wirklich generische relative Pfade von "außerhalb" Ihres aktuellen Controllers/Ihrer Aktion manipulieren? –

+0

tue ich ... leider. Trotzdem danke. – btelles

Antwort

9

Rspec hat eine Methode 'params_for', die Action-Controllers Routing-Methoden verwendet Pfade mit Methoden in Routen zu analysieren.

Ihnen ist etwas robuster als diese, aber es läuft darauf hinaus:

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

Sie können eine Verwarnungswarnung erhalten, wenn Sie ActionController :: Routing :: Routes verwenden –

+0

Bitte geben Sie den Quelllink für die 'params_for' Methode an – zykadelic

+1

' Rails.application.routes.recognose_path' arbeitet mit Rails 3.2 – zykadelic

8

Mit Rails 3 ist der beste Weg

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

Was ist mit Schienen 4? –