Kaip gauti dabartinį absoliutų URL Ruby on Rails?

Kaip galiu gauti dabartinį absoliutų URL mano „Ruby on Rails“ vaizde?

request.request_uri grąžina tik santykinį URL.

889
30 янв. nustatė Jakubas Arnoldas 2010-01-30 01:32 '10 ne 1:32 2010-01-30 01:32
@ 32 atsakymai
  • 1
  • 2

3.2 bėgiams arba 4+ bėgiams

Galite gauti request.original_url gauti dabartinį URL.

Šis metodas aprašytas „original_url“ metode , tačiau jei domitės, įgyvendinimas yra toks:

 def original_url base_url + original_fullpath end 

3 bėgiams:

Galite rašyti "#{request.protocol}#{request.host_with_port}#{request.fullpath}" nes request.url dabar request.url pasenęs.


border=0

2 bėgiams:

Vietoj request.request_uri galite parašyti request.request_uri . Tai sujungia protokolą (paprastai http: //) su priimančiuoju ir request_uri, kad suteiktumėte jums visą adresą.

1269
30 янв. Atsakymą pateikė Jaime Bellmyer sausio 30 d 2010-01-30 01:44 '10 ne 1:44 2010-01-30 01:44

Manau, kad dabar „Ruby on Rails 3.0“ dabar request.fullpath .

border=0
123
07 янв. atsakymas suteiktas mcr Jan 07 2011-01-07 23:20 '11, 23:20, 2011-01-07 23:20

Galite naudoti url_for(:only_path => false)

108
07 окт. atsakymas pateikiamas grzuy 07 okt. 2011-10-07 20:18 '11 prie 20:18 2011-10-07 20:18

ATSAKOMYBĖ ĮSPĖJIMAS: #request_uri naudojimas yra pasenęs . Vietoj to naudokite visą kelią.

64
07 дек. Atsakymą pateikė „ ecoologic“ 07 gruodis. 2010-12-07 21:21 '10, 21:21, 2010-12-07 21:21

Jei naudojate „ Rails 3.2“ arba „ Rails 4“ , turite gauti request.original_url kad gautumėte dabartinį URL.


Metodo dokumentacija yra adresu http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url , tačiau jei domitės, įgyvendinimas yra toks:

 def original_url base_url + original_fullpath end 
55
02 июля '13 в 16:30 2013-07-02 16:30 Atsakymą pateikė Mike liepos 2 d. 13 d. 16.30 val. 2013-07-02 16:30

Galite pridėti šį current_url metodą „ApplicationController“, kad galėtumėte grąžinti dabartinį URL ir leisti sujungti kitus parametrus.

 # 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 

Naudojimo pavyzdys

 current_url --> http://... current_url(:page=>4) --> http://...> 
47
15 сент. atsakymas pateikiamas britžerio rugsėjo 15 d 2010-09-15 10:53 '10, 10:53, 2010-09-15 10:53

Ruby on Rails 3:

 request.url request.host_with_port 

Aktyvavau derinimo sesiją ir paprašiau objekto:

 request.public_methods 
32
19 авг. Duke atsakymas, pateiktas rugpjūčio 19 d 2011-08-19 00:21 '11 at 0:21 2011-08-19 00:21

Ruby on Rails 3.1.0.rc4:

  request.fullpath 
30
13 июля '11 в 17:55 2011-07-13 17:55 atsakymą pateikė Lucas Renan, liepos 13 d., 11 val., 17:55, 2011-07-13 17:55

Man reikėjo URL programos, bet su pakatalogiu. Naudoju:

 root_url(:only_path => false) 
27
29 окт. atsakymas duotas Dorian 29 spalio. 2011-10-29 01:55 '11 at 1:55 2011-10-29 01:55
  url_for(params) 

Ir jūs galite lengvai pridėti naują parametrą:

 url_for(params.merge(:tag => "lol")) 
26
12 апр. Yuri Barbashov atsakymas, pateiktas balandžio 12 d 2012-04-12 15:32 '12, 15:32 pm 2012-04-12 15:32

Manau, kad request.domain veiks, bet ką daryti, jei esate tokiame subkataloge kaip blah.blah.com? Kažkas panašaus gali veikti:

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

Pakeiskite parametrus pagal savo kelio struktūrą.

Tikiuosi, kad tai padės!

14
30 янв. James M atsakymą pateikė sausio 30 d. 2010-01-30 01:44 '10 ne 1:44 2010-01-30 01:44

Panašu, kad Ruby on Rails 3 request_uri pasenusi.

 Using #request_uri is deprecated. Use fullpath instead. 
13
01 марта '11 в 20:15 2011-03-01 20:15 atsakymą pateikė Ken Earley kovo 1 d. 11 val. 20:15 2011-03-01 20:15

Ruby 1.9.3-p194 ir Ruby on Rails 3.2.6 naudojimas:

Jei request.fullpath neveikia, pabandykite request.env ["HTTP_REFERER"]

Čia yra mano istorija.

Turėjau panašią problemą, kai surasite dabartinį URL (kuris rodomas naršyklės naudotojo adreso juostoje) kaupiamiesiems puslapiams, kurie sujungia informaciją iš įvairių valdiklių, pavyzdžiui, http://localhost:3002/users/1/history/issues .

Vartotojas gali pereiti prie skirtingų tipų problemų sąrašų. Visi šie sąrašai perkeliami per „Ajax“ iš skirtingų / dalinių valdiklių (be perkrovimo).

Problema buvo ta, kad kiekviename sąrašo elemente būtų nustatytas teisingas mygtukas „Atgal“, kad mygtukas „Atgal“ galėtų tinkamai veikti tiek savo puslapyje, tiek bendroje puslapio istorijoje.

Jei naudoju request.fullpath , jis grąžina kelią į paskutinį „JavaScript“ užklausą, kuri tikrai nėra URL, kurio ieškoju.

Taigi, aš naudoju request.env ["HTTP_REFERER"] , kuris išsaugo paskutinio pakartotinai įkeltos užklausos URL.

Čia yra ištrauka iš dalinio sprendimo priėmimo.

 - 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
10 авг. atsakymą pateikė Serge Seletskyy rugpjūčio 10 d. 2012-08-10 13:35 '12 13:35 2012-08-10 13:35

Tai veikia „Ruby on Rails 3.0“ ir turėtų būti palaikoma daugelyje „Ruby on Rails“ versijų:

 request.env['REQUEST_URI'] 
12
14 апр. Tim Santeford atsakymas balandžio 14 d 2012-04-14 08:59 '12 at 8:59 2012-04-14 08:59

Nė vienas iš čia pateiktų pasiūlymų nepadėjo man liūdesio, išskyrus tuos, kur kažkas sakė, kad jis naudojo debugerį, kad surastų, ko ieškojo.

Vietoj standarto 404 ir 500 sukūriau kai kuriuos priskirtus klaidų puslapius, bet request.url baigėsi /404 vietoj laukiamo /non-existing-mumbo-jumbo .

Man reikėjo

 request.original_url 
11
19 июня '12 в 17:15 2012-06-19 17:15 atsakymą Fransas pateikė birželio 19 d. 12 d. 17.15 val. 2012-06-19 17:15

Galite naudoti rubino metodą:

 :root_url 

kuris gaus visą kelią: vietinis: 3000 / l

9
21 июля '13 в 17:41 2013-07-21 17:41 atsakymas duotas Idanui Wenderiui liepos 21 d., 17:41, 2013-07-21 17:41

Jei giminaitė, tai reiškia tik be domeno ir tada peržiūrėkite request.domain .

9
30 янв. Atsakymą pateikė ghoppe, sausio 30 d 2010-01-30 01:37 '10 ne 1:37 2010-01-30 01:37
 (url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false) 
7
11 мая '12 в 10:21 2012-05-11 10:21 atsakymas į msroot gegužės 11, 12, 10:21 2012-05-11 10:21

Rails 3 galite naudoti

 request.original_url 

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

6
13 марта '13 в 14:58 2013-03-13 14:58 atsakymą pateikė mikrobi kovo 13 d. 13 val. 14:58 2013-03-13 14:58

Bėgiai 4.0

Galite naudoti request.original_url , išvestis bus tokia, kaip parodyta žemiau.

 get "/articles?page=2" request.original_url # => "http://www.example.com/articles?page=2" 
4
26 марта '15 в 17:07 2015-03-26 17:07 atsakymas pateikiamas Arvind singh kovo 26 d. 15 val. 17:07 2015-03-26 17:07

Bėgiams 3:

request.fullpath

3
10 авг. Atsakymą davė Pankhuri 10 rug . 2013-08-10 11:43 '13, 11:43, 2013-08-10 11:43

jei norite būti konkretus, tai yra, jūs žinote, kokį kelią jums reikia:

 link_to current_path(@resource, :only_path => false), current_path(@resource) 
3
02 янв. Atsakymas pateikiamas Victor S 02 Jan. 2013-01-02 01:30 '13, 1:30, 2013-01-02 01:30

Gaukite užklausos URL be jokių užklausos parametrų.

 def current_url_without_parameters request.base_url + request.path end 
2
09 апр. Atsakymas pateikiamas Nerve 09 balandžio. 2015-04-09 16:34 '15, 16:34 pm 2015-04-09 16:34
 request.env["REQUEST_URI"] 

Dirba bėgiuose 2.3.4 ir nežino apie kitas versijas.

2
03 марта '14 в 0:15 2014-03-03 00:15 atsakymą pateikė Satishakumar Awati kovo 03 '14, 0:15 2014-03-03 00:15

Galite naudoti bet kurį bėgį 3.2:

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

Manau, kad jis veiks visur

 "#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}" 
2
11 марта '14 в 8:09 2014-03-11 08:09 atsakymas duotas uma kovo 11 d., 14 val. 8:09 2014-03-11 08:09

Galite naudoti:

 request.full_path 

arba

 request.url 

Tikiuosi, kad tai išspręs jūsų problemą.

Sveikinimai

1
18 авг. Atsakymas, kurį pateikė Ali Hassan Mirza 18 rug. 2015-08-18 08:41 '15 8:41 am 2015-08-18 08:41

Galite naudoti

 request.original_url 

arba

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

gauti dabartinį URL.

1
02 дек. Atsakymą pateikė Robin Garg. 2015-12-02 10:07 '15 - 10:07 2015-12-02 10:07

Galite nustatyti kintamąjį URI.parse(current_url) , nematau šio sakinio ir jis veikia man.

0
04 марта '16 в 22:03 2016-03-04 22:03 atsakymas pateikiamas RaK427 kovo 4 d. 16 d. 22:03 2016-03-04 22:03

Norėdami gauti absoliutų URL, tai reiškia, kad from the root jis gali būti rodomas taip

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

Users_url pagalbininkas sukuria URL, kuriame yra protokolas ir kompiuterio pavadinimas. Users_path pagalbininkas generuoja tik dalį kelio.

 users_url: http://localhost/users users_path: /users 
0
12 дек. Atsakymą pateikė Ahmad hamza 12 d. 2012-12-12 17:41 '12 17:41 2012-12-12 17:41

Bėgiai 4

Valdiklis:

 def absolute_url request.base_url + request.original_fullpath end 

„Action Mailer 4.2“ išleidžia pastebimus pakeitimus:

link_to ir url_for sukuria numatytuosius absoliučius URL šablonuose, jums nebereikia praeiti tik_path: false. (Priimti)

Peržiūrėti:

Jei naudojate _url priesagą, sukurtas URL yra absoliutus. Naudokite _path kad gautumėte santykinį URL.

 <%= link_to "Home", root_url %> 

Daugiau informacijos rasite nuorodoje:

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

0
17 апр. atsakymas, kurį pateikė user3118220 Apr 17 2015-04-17 15:25 '15 15:25 2015-04-17 15:25
  • 1
  • 2

Kiti klausimai apie žymes „ arba „ Klauskite“