Jak uzyskać aktualny bezwzględny adres URL w Ruby on Rails?

Jak mogę uzyskać bieżącyabsolutny URL w moim widoku Ruby on Rails?

request.request_uri zwraca tylko względny adres URL.

Author: Andrei Eliade, 2010-01-30

30 answers

Dla Rails 3.2 lub Rails 4 +

Powinieneś użyć request.original_url, Aby uzyskać bieżący adres URL.

Ta metoda jest udokumentowana w original_url method , ale jeśli jesteś ciekawy, implementacja jest:

def original_url
  base_url + original_fullpath
end

Dla Rails 3:

Możesz pisać "#{request.protocol}#{request.host_with_port}#{request.fullpath}", ponieważ request.url jest teraz przestarzały.


Dla Rails 2:

Możesz pisać request.url zamiast request.request_uri. Łączy protokół (Zwykle http://) z hostem, a request_uri daje pełną adres.

 1333
Author: Manish Shrivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-12 07:32:58

Myślę, że metoda Ruby on Rails 3.0 jest teraz request.fullpath.

 126
Author: mcr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:52:25

You could use url_for(:only_path => false)

 112
Author: grzuy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-07 17:18:25

Ostrzeżenie o wycofaniu: Użycie #request_uri jest przestarzałe . Zamiast tego użyj fullpath.

 64
Author: ecoologic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-13 02:36:56

Jeśli używasz Rails 3.2 lub Rails 4 powinieneś użyć request.original_url Aby uzyskać bieżący adres URL.


Dokumentacja metody znajduje się w http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url ale jeśli jesteś ciekawy implementacja to:

def original_url
  base_url + original_fullpath
end
 56
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 15:24:41

Możesz dodać metodę current_url w ApplicationController, aby zwrócić bieżący adres URL i umożliwić łączenie w innych parametrach

# 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

Przykład Użycia:

current_url --> http://...
current_url(:page=>4) --> http://...&page=4
 49
Author: grosser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 04:19:15

Dla Ruby on Rails 3:

request.url
request.host_with_port

Uruchomiłem sesję debuggera i zapytałem obiekt request:

request.public_methods
 34
Author: Duke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:53:42

W Ruby on Rails 3.1.0.rc4:

 request.fullpath
 30
Author: Lucas Renan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:53:02

Potrzebowałem aplikacji URL ale z podkatalogiem. Użyłem:

root_url(:only_path => false)
 27
Author: Dorian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:54:23
 url_for(params)

I możesz łatwo dodać nowy parametr:

url_for(params.merge(:tag => "lol"))
 26
Author: Yuri Barbashov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:54:54

Myślę, że prośba.domena by działała, ale co jeśli jesteś w podkatalogu jak blah.blah.com? coś takiego może zadziałać:

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

Zmień parametry na podstawie struktury ścieżki.

Mam nadzieję, że to pomoże!
 14
Author: James M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-29 22:44:55

Wygląda na to, że request_uri jest przestarzały w Ruby on Rails 3.

Using #request_uri is deprecated. Use fullpath instead.
 13
Author: Ken Earley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:52:44

To działa dla Ruby on Rails 3.0 i powinno być obsługiwane przez większość wersji Ruby on Rails:

request.env['REQUEST_URI']
 12
Author: Tim Santeford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:55:38

Używanie Ruby 1.9.3-p194 i Ruby on Rails 3.2.6:

If request.fullpath nie działa dla ciebie, spróbuj request.env ["HTTP_REFERER"]

Oto moja historia poniżej.

Mam podobny problem z wykrywaniem bieżącego adresu URL (który jest wyświetlany w pasku adresu dla użytkownika w przeglądarce) dla stron zbiorczych, które łączą informacje z różnych kontrolerów, na przykład http://localhost:3002/users/1/history/issues.

Użytkownik może przełączać się na różne listy typów spraw. Wszystkie te listy są ładowane przez Ajax z różnych kontrolerów / części (bez przeładowywania).

Problem polegał na ustawieniu właściwej ścieżki dla przycisku Wstecz w każdej pozycji listy, aby przycisk back mógł działać poprawnie zarówno na własnej stronie, jak i na stronie zbiorczej historia .

W przypadku, gdy używam request.fullpath , zwraca ścieżkę ostatniego żądania JavaScript, który zdecydowanie nie jest adresem URL, którego szukam.

Więc użyłem request.env ["HTTP_REFERER"] który przechowuje adres URL ostatnio załadowanego żądania.

Oto fragment Części do podjęcia decyzji

- 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
 12
Author: Serge Seletskyy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:58:32

Żadna z sugestii tutaj w wątku nie pomogła mi niestety, z wyjątkiem tej, w której ktoś powiedział, że użył debuggera, aby znaleźć to, czego szukał.

Stworzyłem kilka niestandardowych stron błędów zamiast standardowych 404 i 500, Ale request.url skończyło się na /404 zamiast oczekiwanego /non-existing-mumbo-jumbo.

Potrzebowałem użyć

request.original_url
 11
Author: Frans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 12:58:09

Jeśli przez relative, masz na myśli tylko bez domeny, to spójrz na request.domain.

 9
Author: ghoppe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:51:21

Możesz użyć metody ruby:

:root_url

Który otrzyma pełną ścieżkę z bazowym adresem url:

localhost:3000/bla
 9
Author: Idan Wender,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 09:07:14
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
 8
Author: msroot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-11 07:21:17

W Rails 3 możesz użyć

request.original_url

Http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url

 6
Author: mikrobi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-13 11:58:41

Rails 4.0

Możesz użyć request.original_url, wynik będzie jak podano poniżej przykład

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"
 4
Author: Arvind singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-26 14:07:19

Jeśli chcesz być konkretny, czyli znasz ścieżkę, której potrzebujesz:

link_to current_path(@resource, :only_path => false), current_path(@resource)
 3
Author: Victor S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-01 22:30:40

Dla rails 3:

Prośba.fullpath

 3
Author: Pankhuri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-10 08:43:32

Możesz użyć dowolnego dla rails 3.2:

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

Myślę, że będzie działać wszędzie gdzie

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
 3
Author: uma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 05:17:06
request.env["REQUEST_URI"]

Działa w Rails 2.3.4 testowane i nie wiem o innych wersjach.

 2
Author: Satishakumar Awati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-02 21:15:22

Aby uzyskać adres URL żądania bez żadnych parametrów zapytania.

def current_url_without_parameters
  request.base_url + request.path
end
 2
Author: Nerve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 13:34:29

Możesz użyć

request.original_url 

Lub

"#{request.protocol}#{request.host_with_port}" 

Aby pobrać aktualny adres URL.

 2
Author: Robin Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-02 07:07:32

Dla Rails 3.2 lub Rails 4 Po prostu wejdź w ten sposób " Prośba.original_url" Reference: Original URL Method

Dla Rails 3 Na życzenie.adres URL jest przestarzały.Możemy uzyskać ścieżkę absolutną poprzez konkatenację

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

Dla Rails 2

request.url
 2
Author: Amit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-12 08:43:58

Możesz użyć:

request.full_path

Lub

request.url
Mam nadzieję, że to rozwiąże twój problem.

Cheers

 1
Author: Ali Hassan Mirza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 05:41:38

Możesz ustawić zmienną na URI.parse(current_url), nie widzę tu jeszcze tej propozycji i u mnie działa.

 1
Author: RaK427,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 20:27:50

Aby uzyskać bezwzględny adres URL, co oznacza, że from the root może być wyświetlany w ten sposób

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

Pomocnik users_url generuje adres URL zawierający protokół i host nazwisko. Helper users_path generuje tylko część ścieżki.

users_url: http://localhost/users
users_path: /users
 0
Author: Ahmad hamza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-12 14:41:42