Wie kann ich die aktuelle absolute URL in meiner Ruby on Rails-Ansicht abrufen?
Der gibt request.request_uri
nur die relative URL zurück .
ruby-on-rails
ruby
url
Jakub Arnold
quelle
quelle
Antworten:
Für Rails 3.2 oder Rails 4+
Sie sollten verwenden
request.original_url
, um die aktuelle URL abzurufen.Diese Methode ist unter original_url dokumentiert. Wenn Sie jedoch neugierig sind, lautet die Implementierung wie folgt:
Für Schienen 3:
Sie können schreiben
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, darequest.url
jetzt veraltet ist.Für Schienen 2:
Sie können schreiben ,
request.url
stattrequest.request_uri
. Dadurch wird das Protokoll (normalerweise http: //) mit dem Host und request_uri kombiniert, um Ihnen die vollständige Adresse zu geben.quelle
fullpath
enthält NICHT das Protokoll / die Domäne / den Port! Es ist keine absolute URL!"http://#{request.host+request.fullpath}"
wird funktionieren oder auf andere Weise (wenn der Port wichtig ist)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
veralteten Anspruch verweisen ? Die vorgeschlagene Lösung ist nur ein langer Weg, um zu sagen, wasrequest.url
bereits getan wird. Die Implementierung ist einfach Protokoll + Host_with_port + Fullpath ( github.com/rails/rails/blob/… )Ich denke, dass die Ruby on Rails 3.0-Methode jetzt ist
request.fullpath
.quelle
Du könntest benutzen
url_for(only_path: false)
quelle
DEPRECATION WARNING: Die Verwendung von #request_uri ist veraltet . Verwenden Sie stattdessen den vollständigen Pfad.
quelle
request.uri
und wurde in dieser Frage bereits mehrmals erwähnt, aber ... ok, dankeWenn Sie Rails 3.2 oder Rails 4 verwenden , sollten
request.original_url
Sie die aktuelle URL abrufen.Die Dokumentation für die Methode finden Sie unter http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url. Wenn Sie jedoch neugierig sind, lautet die Implementierung:
quelle
Sie können diese current_url- Methode im ApplicationController hinzufügen , um die aktuelle URL zurückzugeben und das Zusammenführen anderer Parameter zu ermöglichen
Anwendungsbeispiel:
quelle
url_for params.merge(:format => "PDF", :only_path => false)
link_to
können Sie nur verwenden ,params.merge
die und überspringenurl_for
insgesamtFür Ruby on Rails 3:
Ich habe eine Debugger-Sitzung gestartet und das Anforderungsobjekt abgefragt:
quelle
In Ruby on Rails 3.1.0.rc4:
quelle
fullpath
bietet keinabsolute URL
als Original angefordertes Poster an.Ich brauchte die Anwendungs- URL, aber mit dem Unterverzeichnis. Ich benutzte:
quelle
Und Sie können ganz einfach neue Parameter hinzufügen:
quelle
Ich denke, request.domain würde funktionieren, aber was ist, wenn Sie sich in einem Unterverzeichnis wie blah.blah.com befinden? So etwas könnte funktionieren:
Ändern Sie die Parameter basierend auf Ihrer Pfadstruktur.
Ich hoffe, das hilft!
quelle
Es sieht so aus,
request_uri
als wäre Ruby on Rails 3 veraltet.quelle
Verwenden von Ruby 1.9.3-p194 und Ruby on Rails 3.2.6:
Wenn request.fullpath für Sie nicht funktioniert, versuchen Sie request.env ["HTTP_REFERER"]
Hier ist meine Geschichte unten.
Ich habe ein ähnliches Problem beim Erkennen der aktuellen URL (die in der Adressleiste für Benutzer in ihrem Browser angezeigt wird) für kumulative Seiten, die beispielsweise Informationen von verschiedenen Controllern kombinieren
http://localhost:3002/users/1/history/issues
.Der Benutzer kann zu verschiedenen Listen von Problemtypen wechseln. Alle diese Listen werden über Ajax von verschiedenen Controllern / Partials geladen (ohne Neuladen).
Das Problem war , den richtigen Weg für die Zurück - Taste in jedem Element der Liste zu setzen , so dass die Zurück - Taste auf einer eigenen Seite und in der kumulativen Seite korrekt beide funktionieren könnte Geschichte .
Wenn ich request.fullpath verwende , wird der Pfad der letzten JavaScript-Anforderung zurückgegeben, bei der es sich definitiv nicht um die gesuchte URL handelt.
Also habe ich request.env ["HTTP_REFERER"] verwendet, in dem die URL der zuletzt neu geladenen Anfrage gespeichert ist .
Hier ist ein Auszug aus dem Teil, um eine Entscheidung zu treffen
quelle
Dies funktioniert für Ruby on Rails 3.0 und sollte von den meisten Versionen von Ruby on Rails unterstützt werden:
quelle
Keiner der Vorschläge hier im Thread hat mir leider geholfen, außer dem, bei dem jemand sagte, er habe den Debugger verwendet, um zu finden, wonach er gesucht hat.
Ich habe einige benutzerdefinierte Fehlerseiten anstelle der Standard - 404 erstellt und 500, aber
request.url
in endete/404
statt der erwarteten/non-existing-mumbo-jumbo
.Was ich benutzen musste war
quelle
Wenn Sie mit relativ meinen, nur ohne die Domain, dann schauen Sie in
request.domain
.quelle
quelle
Sie können die Ruby-Methode verwenden:
welches den vollständigen Pfad mit der Basis-URL erhält:
quelle
:root_url
, um die absolute URL zu erhalten? Angenommen, ich verwende etwas Ähnlichessome_method(:products_brand_url, brand: brand, entity_name: "brand")
und binsome_method
definiert als "def some_method (route, opts = {}) end". Ich möchte nicht, dass meine Route so aussieht -http://localhost:3000/brands/brand_name?&entity_name="brand"
. Ich möchte, dass die Route so aussiehthttp://localhost:3000/brands/brand_name
. Ich möchte nur, dass dasentity_name
ein Teil des opts Hash ist und nicht als Parameter für die absolute URL.root_url
.In Rails 3 können Sie verwenden
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
quelle
Sie können eine beliebige für Schienen 3.2 verwenden:
Ich denke, es wird überall funktionieren
quelle
Schienen 4.0
Sie können verwenden
request.original_url
, die Ausgabe erfolgt wie im folgenden Beispiel angegebenquelle
Für Rails 3.2 oder Rails 4 Rufen Sie einfach auf diese Weise "request.original_url" auf. Referenz: Original URL Method
Für Schienen 3 Da request.url veraltet ist. Durch Verketten können wir den absoluten Pfad ermitteln
Für Schienen 2
quelle
Wenn Sie spezifisch sein wollen, wissen Sie, welchen Weg Sie brauchen:
quelle
Für Schienen 3:
quelle
funktioniert in Schienen 2.3.4 getestet und kennt keine anderen Versionen.
quelle
Um die Anforderungs-URL ohne Abfrageparameter abzurufen.
quelle
Sie können entweder verwenden
oder
um die aktuelle URL zu erhalten.
quelle
Sie können verwenden:
oder
Hoffentlich wird es Ihr Problem lösen.
Prost
quelle
Sie können eine Variable auf setzen
URI.parse(current_url)
. Ich sehe diesen Vorschlag hier noch nicht und er funktioniert für mich.quelle
Um die absolute URL zu erhalten, bedeutet dies, dass die URL
from the root
so angezeigt werden kannDer Benutzer users_url generiert eine URL, die das Protokoll und den Hostnamen enthält. Der Hilfsprogramm users_path generiert nur den Pfadabschnitt.
quelle