Ich muss die aktuelle Route in einem Filter in Rails kennen. Wie kann ich herausfinden, was es ist?
Ich mache REST-Ressourcen und sehe keine benannten Routen.
ruby-on-rails
ruby
routing
luca
quelle
quelle
Antworten:
So finden Sie die URI heraus:
So ermitteln Sie die Route, dh Controller, Aktion und Parameter:
quelle
params[:controller]
und verfügbarparams[:action]
. Außerhalb davon ist diese API nicht mehr verfügbar, wenn Sie die Route erkennen möchten. Es hat sich jetzt verschobenActionDispatch::Routing
und ich haberecognize_path
es noch nicht ausprobiert .request.path
, den aktuellen Pfad zu finden.request.env['ORIGINAL_FULLPATH']
, um die möglichen Parameter in den Pfad aufzunehmen, siehe meine Antwort unten.Wenn Sie versuchen, einen Sonderfall in einer Ansicht zu erstellen, können Sie Folgendes verwenden
current_page?
:... oder eine Aktion und ID ...
... oder eine benannte Route ...
...und
Da
current_page?
sowohl ein Controller als auch eine Aktion erforderlich sind, erstelle ichcurrent_controller?
in ApplicationController eine Methode , wenn ich mich nur um den Controller kümmere :Und benutze es so:
... was auch mit mehreren Controllernamen funktioniert ...
quelle
controller_name
undaction_name
eignen sich auch für Helfer und Ansichten für solche Dinge.Die einfachste Lösung, die ich 2015 finden kann (überprüft mit Rails 4, sollte aber auch mit Rails 3 funktionieren)
quelle
<form action="<%= request.path %>">
Du kannst das
Es funktioniert bei mir in Rails 3.1.0.rc4
quelle
In Rails 3 können Sie über das Objekt Rails.application.routes auf das Objekt Rack :: Mount :: RouteSet zugreifen und dann die Erkennung direkt aufrufen
Damit wird die erste (beste) Übereinstimmung erzielt. Die folgende Blockform durchläuft die übereinstimmenden Routen:
Sobald Sie die Route haben, können Sie den Routennamen über route.name abrufen. Wenn Sie den Routennamen für eine bestimmte URL und nicht den aktuellen Anforderungspfad abrufen müssen, müssen Sie ein gefälschtes Anforderungsobjekt verspotten, um es an das Rack weiterzuleiten. Weitere Informationen finden Sie unter ActionController :: Routing :: Routes.recognize_path wie sie es machen.
quelle
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
Basierend auf dem @ AmNaN-Vorschlag (weitere Details):
Jetzt können Sie es zB in einem Navigationslayout aufrufen, um Listenelemente als aktiv zu markieren:
Für die
users
undalerts
Routencurrent_page?
würde reichen:Aber mit verschachtelten Routen und der Anforderung aller Aktionen eines Controllers (vergleichbar mit
items
)current_controller?
war die bessere Methode für mich:Der erste Menüeintrag ist auf diese Weise für folgende Routen aktiv:
quelle
Oder eleganter:
request.path_info
Quelle:
Rack-Dokumentation anfordern
quelle
Ich gehe davon aus, dass Sie die URI meinen:
Wenn Sie den Namen des Controllers benötigen, können Sie gemäß Ihrem Kommentar unten einfach Folgendes tun:
quelle
self.
inself.controller_name
undself.controller_class_name
Sollten Sie auch die Parameter benötigen :
Und denken Sie daran, dass Sie jederzeit
<%= debug request.env %>
eine Ansicht aufrufen können , um alle verfügbaren Optionen anzuzeigen.quelle
request.url
request.path # um den Pfad mit Ausnahme der Basis-URL abzurufen
quelle
Sie können alle Routen über Rake: Routen anzeigen (dies kann Ihnen helfen).
quelle
Sie können
request.env['REQUEST_URI']
den vollständig angeforderten URI anzeigen. Er gibt etwa die folgende Ausgabe ausquelle
Du kannst das:
Jetzt können Sie Folgendes verwenden:
quelle