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.
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.
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
.
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)
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.
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
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
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
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
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)
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"))
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!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.
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']
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
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
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
.
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
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)
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
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"
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)
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
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}"
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.
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
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.
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
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
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.
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
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