6 Stimmen

Pfad-Parsing in Schienen

Ich bin auf der Suche nach einer Methode zum Parsen des Routenpfads wie dieser:

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

Sie sollte im Gegensatz zu url_for

Upd
Ich habe es herausgefunden: Was ist das Gegenteil von url_for in Rails? Eine Funktion, die einen Pfad nimmt und die interpretierte Route erzeugt?

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

Jetzt muss ich also konvertieren posts_path in "/posts"

12voto

Matt Simpson Punkte 472

In Rails 3 können Sie Folgendes tun:

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

Verwendung von ActionController::Routing::Routes.recognize_path weitergeworfen

ActionController::RoutingError Exception: Keine Route entspricht "/accounts/1

0 Stimmen

Beachten Sie, dass dies auch mit vollständigen URLs funktioniert: Rails.application.routes.recognize_path 'http://example.com/accounts/1'

5voto

alex.zherdev Punkte 23460

Es gibt diese Methode:

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

Wenn Sie nur einen String mit Ihrer Route haben (wie "posts_path" ), dann denke ich, dass Sie in dem Kontext, in dem Sie dies verwenden, in der Lage sein sollten, Folgendes zu tun

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

btw, das war auch für mich lehrreich :)

1 Stimmen

Danke :) Was ist also send(:post_path) ?

0 Stimmen

Es ist, wie man Methoden mit einem beliebigen Namen in Ruby aufruft :) in diesem Fall, wenn Sie einen String wie "posts_path" und Sie wollen den Wert von posts_path Methode stattdessen, dann machen Sie einfach send("posts_path") (Sie brauchen nicht einmal in ein Symbol zu konvertieren). Es ist ein Kernkonzept in Ruby, mit dem Sie besser vertraut sein sollten :)

0 Stimmen

OK, danke, ich habe es verstanden. Ich weiß, wie send funktioniert (wie eval in diesem Fall). Aber das Problem war in der Konsole (ich habe gerade versucht ActionController::Routing::Routes.recognize_path(send("post_‌​path".to_sym)) ) also bin ich verwirrt, weil das nicht geklappt hat :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X