it-swarm.com.de

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

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

Der request.request_uri gibt nur die relative URL zurück.

979
Jakub Arnold

Für Rails 3.2 oder Rails 4+

Sie sollten request.original_url verwenden, um die aktuelle URL abzurufen.

Diese Methode ist unter original_url-Methode dokumentiert. Wenn Sie jedoch neugierig sind, lautet die Implementierung:

def original_url
  base_url + original_fullpath
end

Für Rails 3:

Sie können "#{request.protocol}#{request.Host_with_port}#{request.fullpath}" schreiben, da request.url jetzt veraltet ist.


Für Rails 2:

Sie können request.url anstelle von request.request_uri schreiben. Dies kombiniert das Protokoll (normalerweise http: //) mit dem Host und request_uri, um Ihnen die vollständige Adresse zu geben.

1366
Jaime Bellmyer

Ich denke, dass die Methode Ruby on Rails 3.0 jetzt request.fullpath ist.

130
mcr

Sie könnten url_for(:only_path => false) verwenden.

114
grzuy

DEPRECATION WARNUNG: Die Verwendung von #request_uri ist veraltet . Verwenden Sie stattdessen Fullpath. 

67
ecoologic

Wenn Sie Rails 3.2 oder Rails 4 verwenden, sollten Sie request.original_url verwenden, um die aktuelle URL abzurufen.


Die Dokumentation für die Methode finden Sie unter http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url , aber wenn Sie neugierig sind, lautet die Implementierung:

def original_url
  base_url + original_fullpath
end
58
Mike

Sie können diese current_url - Methode im ApplicationController hinzufügen, um die aktuelle URL zurückzugeben und das Zusammenführen anderer Parameter zuzulassen

# https://x.com/y/1?page=1 
# + current_url( :page => 3 )
# = https://x.com/y/1?page=3
def current_url(overwrite={})
    url_for :only_path => false, :params => params.merge(overwrite)
end

Verwendungsbeispiel:

current_url --> http://...
current_url(:page=>4) --> http://...&page=4
50
grosser

Für Ruby on Rails 3:

request.url
request.Host_with_port

Ich habe eine Debugger-Sitzung gestartet und das Anforderungsobjekt abgefragt:

request.public_methods
35
Duke

In Ruby on Rails 3.1.0.rc4:

 request.fullpath
31
Lucas Renan

Ich brauchte die Anwendung URL aber mit dem Unterverzeichnis. Ich benutzte:

root_url(:only_path => false)
28
Dorian
 url_for(params)

Und Sie können ganz einfach neue Parameter hinzufügen:

url_for(params.merge(:tag => "lol"))
27
Yuri Barbashov

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:

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

Ändern Sie die Parameter entsprechend Ihrer Pfadstruktur. 

Hoffentlich hilft das!

15
James M

Es sieht so aus, als wäre request_uri in Ruby on Rails 3 veraltet.

Using #request_uri is deprecated. Use fullpath instead.
14
Ken Earley

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 mit dem Erkennen der aktuellen URL (die in der Adressleiste für den Benutzer in ihrem Browser angezeigt wird) für kumulative Seiten angezeigt, die Informationen von verschiedenen Steuerungen kombiniert, beispielsweise http://localhost:3002/users/1/history/issues.

Der Benutzer kann zu verschiedenen Problemtypen wechseln. Alle diese Listen werden über Ajax von verschiedenen Controllern/Partials geladen (ohne nachzuladen).

Das Problem bestand darin, den korrekten Pfad für die Zurück-Schaltfläche in jedem Element der Liste festzulegen, sodass die Zurück-Schaltfläche sowohl auf ihrer eigenen Seite als auch auf der kumulativen Seite history ordnungsgemäß funktionieren konnte.

Falls ich request.fullpath verwende, gibt es den Pfad der letzten JavaScript-Anfrage zurück, die definitiv nicht die URL ist, nach der ich suche.

Also habe ich request.env ["HTTP_REFERER"] verwendet, um die URL der letzten neu geladenen Anfrage zu speichern.

Hier ist ein Auszug aus dem Teil, um eine Entscheidung zu treffen

- 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
13
Serge Seletskyy

Dies funktioniert für Ruby on Rails 3.0 und sollte von den meisten Versionen von Ruby on Rails unterstützt werden:

request.env['REQUEST_URI']
12
Tim Santeford

Keiner der Vorschläge hier im Thread half mir traurig, außer dem, bei dem jemand sagte, er hätte den Debugger benutzt, um zu finden, wonach er suchte.

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

Was ich brauchte, war

request.original_url
11
Frans

Wenn mit relativ gemeint ist, bedeutet dies nur ohne Domäne, dann schauen Sie in request.domain.

9
ghoppe

Sie können die Ruby-Methode verwenden:

:root_url

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

localhost:3000/bla
9
Idan Wender
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
8
msroot

In Rails 3 können Sie verwenden

request.original_url

http://apidock.com/Rails/v3.2.8/ActionDispatch/Request/original_url

6
mikrobi

Schienen 4.0

sie können request.original_url verwenden. Die Ausgabe erfolgt wie im folgenden Beispiel angegeben

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"
5
Arvind singh

wenn Sie konkret sein wollen, wissen Sie, welchen Pfad Sie benötigen: 

link_to current_path(@resource, :only_path => false), current_path(@resource)
3
Victor S

Sie können entweder verwenden 

request.original_url 

oder 

"#{request.protocol}#{request.Host_with_port}" 

um die aktuelle URL zu erhalten.

3
Robin Garg

Für Rails 3:

request.fullpath

3
Pankhuri

Für Rails 3.2 oder Rails 4 Geben Sie einfach "request.original_url" Referenz: Ursprüngliche URL-Methode

For Rails 3 Da request.url veraltet ist. Wir können den absoluten Pfad durch Verketten erhalten

"#{request.protocol}#{request.Host_with_port}#{request.fullpath}"

Für Rails 2

request.url
3
Amit

sie können jeden für Rails 3.2 verwenden:

request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']

Ich denke, es wird überall funktionieren

"#{request.protocol}#{request.Host}:#{request.port}#{request.fullpath}"
3
uma
request.env["REQUEST_URI"]

funktioniert in Rails 2.3.4 getestet und kennt andere Versionen nicht.

2

Um die Anforderungs-URL ohne Abfrageparameter abzurufen.

def current_url_without_parameters
  request.base_url + request.path
end
2
Nerve

Sie können verwenden:

request.full_path

oder 

request.url

Hoffentlich löst es Ihr Problem.

Prost

1

Sie können eine Variable auf URI.parse(current_url) setzen. Ich sehe diesen Vorschlag hier noch nicht und er funktioniert für mich.

1
RaK427

Für Rails 3.x und höher:

#{request.protocol}#{request.Host_with_port}#{request.fullpath}

Für Rails 3.2 und höher:

request.original_url

Weil in Rails 3.2 und höher:

request.original_url = request.base_url + request.original_fullpath

Weitere Informationen finden Sie unter http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url

0
V K Singh

Schienen 4

Regler:

def absolute_url
  request.base_url + request.original_fullpath
end

Action Mailer Bemerkenswerte Änderungen in 4.2 release :

link_to und url_für das Generieren absoluter URLs standardmäßig in Vorlagen. Es ist nicht mehr erforderlich, nur_path: false zu übergeben. (Verpflichten)

Aussicht:

Wenn Sie das Suffix _url verwenden, ist die generierte URL absolut. Verwenden Sie _path, um eine relative URL abzurufen.

<%= link_to "Home", root_url %>

Weitere Informationen finden Sie unter:

http://blog.grepruby.com/2015/04/absolute-url-full-url-in-Rails-4.html

0
user3118220

Um die absolute URL zu erhalten, kann der from the root so angezeigt werden 

<%= link_to 'Edit', edit_user_url(user) %>

Der user_url-Helper generiert eine URL, die das Protokoll und den Host. Der user_path-Helfer generiert nur den Pfadteil.

users_url: http://localhost/users
users_path: /users
0
Ahmad hamza