1129 Stimmen

Wie erhalte ich die aktuelle absolute URL in Ruby on Rails?

Wie kann ich die aktuelle absolut URL in meiner Ruby on Rails-Ansicht?

Le site request.request_uri gibt nur die relativ URL.

16voto

James M Punkte 239

Ich denke, request.domain würde funktionieren, aber was ist, wenn Sie sich in einem Unterverzeichnis wie blah.blah.com befinden? Etwas wie dies könnte funktionieren:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

Ändern Sie die Parameter entsprechend Ihrer Pfadstruktur.

Ich hoffe, das hilft!

14voto

Ken Earley Punkte 779

Es sieht so aus request_uri ist in Ruby on Rails 3 veraltet.

Using #request_uri is deprecated. Use fullpath instead.

13voto

Sergiy Seletskyy Punkte 14714

Verwendung von Ruby 1.9.3-p194 und Ruby on Rails 3.2.6:

Si request.fullpath bei Ihnen nicht funktioniert, versuchen Sie request.env["HTTP_REFERER"]

Im Folgenden wird meine Geschichte erzählt.

Ich habe ein ähnliches Problem mit der Erkennung der aktuellen URL (die in der Adressleiste des Browsers des Benutzers angezeigt wird) für kumulative Seiten, die z. B. Informationen aus 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 Nachladen).

Das Problem bestand darin, den richtigen Pfad für die Schaltfläche "Zurück" in jedem Element der Liste festzulegen, damit die Schaltfläche "Zurück" sowohl auf der eigenen Seite als auch auf der kumulativen Seite korrekt funktioniert Geschichte .

Für den Fall, dass ich request.fullpath wird der Pfad der letzten JavaScript-Anforderung zurückgegeben, was definitiv nicht die URL ist, nach der ich suche.

Ich habe also request.env["HTTP_REFERER"] die die URL der letzten neu geladenen Anfrage speichert.

Hier ein Auszug aus dem Teil zur Entscheidungsfindung

- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
  - back_url = user_history_issue_path(@user, list: "needed_type")
- else
  - back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote

12voto

Frans Punkte 1310

Keiner der Vorschläge hier im Thread hat mir leider geholfen, außer dem, in dem jemand sagte, er habe den Debugger benutzt, um zu finden, was er suchte.

Ich habe einige benutzerdefinierte Fehlerseiten anstelle der Standard 404 und 500 erstellt, aber request.url endete in /404 statt der erwarteten /non-existing-mumbo-jumbo .

Was ich verwenden musste, war

request.original_url

9voto

Idan Wender Punkte 957

Sie können die Ruby-Methode verwenden:

:root_url

die den vollständigen Pfad mit der Basis-URL liefert:

localhost:3000/bla

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