Ruby on Rails-da mövcud mutlak URL'yi necə almaq olar?

Ruby on Rails görünümündeki mövcud mutlak URL'yi nasıl alabilirim?

request.request_uri yalnız nisbi URL qaytarır.

889
30 янв. 30 yanvarda Jakub Arnold tərəfindən təyin olundu 2010-01-30 01:32 '10 at 1:32 2010-01-30 01:32
@ 32 cavab
  • 1
  • 2

Rails 3.2 və ya Rails 4+ üçün

Mövcud URL'yi almaq üçün request.original_url istifadə edə bilərsiniz.

Bu üsul original_url metodunda təsvir olunur, ancaq maraqlı olursanız, tətbiq belədir:

 def original_url base_url + original_fullpath end 

Rails 3 üçün:

"#{request.protocol}#{request.host_with_port}#{request.fullpath}" yaza bilərsiniz, çünki request.url artıq köhnəlmişdir.


border=0

Rails 2 üçün:

request.url yerinə request.url yaza bilərsiniz. Bu, protokolu birləşdirir (adətən http: //), tam ünvanı ilə təmin etmək üçün host və request_uri ilə birlikdə.

1269
30 янв. Cavab Jaime Bellmyer tərəfindən verilir 30 yanvar 2010-01-30 01:44 '10 at 1:44 2010-01-30 01:44

Hesab edirəm ki, Ruby on Rails 3.0 artıq tələb edir.

border=0
123
07 янв. Jan 07 verildi cavab 2011-01-07 23:20 '11 saat 23:20 'də 2011-01-07 23:20

url_for(:only_path => false) istifadə edə bilərsiniz

108
07 окт. Cavab 07 oktyabr ayına qədər verilir . 2011-10-07 20:18 '11 saat 20:18 'də 2011-10-07 20:18

DISCLAIMER WARNING: # request_uri-nin istifadəsi qadağandır . Əvəzində tam yoldan istifadə edin.

64
07 дек. Cavab ecoloqik tərəfindən verilir 07 Dekabr. 2010-12-07 21:21 '10 at 21:21 2010-12-07 21:21

Rails 3.2 və ya Rails 4 istifadə edirsinizsə, mövcud URL almaq üçün request.original_url istifadə etməlisiniz.


Metodun sənədləri http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url ünvanında yerləşir, lakin maraqlı olduğunuz halda tətbiq aşağıdakı kimidir:

 def original_url base_url + original_fullpath end 
55
02 июля '13 в 16:30 2013-07-02 16:30 Cavab Mike tərəfindən 02 İyul 2013 'da saat 16:30 ' da 2013-07-02 16:30 'da verilir

Mövcud URL'yi qaytarmaq və digər parametrlərin birləşdirilməsinə imkan vermək üçün bu current_url üsulunu ApplicationController əlavə edə bilərsiniz.

 # 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 

İstifadə nümunəsi

 current_url --> http://... current_url(:page=>4) --> http://...> 
47
15 сент. Cavab grosser tərəfindən verilir Sep 15 2010-09-15 10:53 '10 at 10:53 2010-09-15 10:53

Ruby on Rails 3:

 request.url request.host_with_port 

Hata ayıklayıcısının sessiyasını aktivləşdirdim və tələbin obyektini tələb etdim:

 request.public_methods 
32
19 авг. Duke tərəfindən 19 Avqustda cavab verildi 2011-08-19 00:21 '11 'də 0:21' da 2011-08-19 00:21

Ruby on Rails'da 3.1.0.rc4:

  request.fullpath 
30
13 июля '11 в 17:55 2011-07-13 17:55 Cavab Lucas Renan tərəfindən 13 iyul 2011-ci il saat 17: 55-də verilir

URL tətbiqinə ehtiyacım var, ancaq bir alt qovluq ilə. Mən istifadə etdilər:

 root_url(:only_path => false) 
27
29 окт. Dorian cavab Oct 29 verildi . 2011-10-29 01:55 '11 'də 1:55' də 2011-10-29 01:55
  url_for(params) 

Və asanlıqla yeni bir parametr əlavə edə bilərsiniz:

 url_for(params.merge(:tag => "lol")) 
26
12 апр. Yuri Barbaşovun aprelin 12-də verdiyi cavabı 2012-04-12 15:32 '12 at 3:32 pm 2012-04-12 15:32

Hesab edirəm ki, request.domain işləyəcək, amma blah.blah.com kimi bir alt qovluqda olmağınız nədir? Bu kimi bir iş ola bilər:

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

Yolunuzun strukturuna əsaslanan parametrləri dəyişdirin.

Bu kömək edir!

14
30 янв. Cavab 30 yanvar tarixində James M tərəfindən verilmişdir . 2010-01-30 01:44 '10 at 1:44 2010-01-30 01:44

Istədiyiniz kimi, request_uri Ruby Rails 3-də qaldırılmışdır.

 Using #request_uri is deprecated. Use fullpath instead. 
13
01 марта '11 в 20:15 2011-03-01 20:15 cavab Ken Kenley martın 01-də saat 20: 15-də verilir. 2011-03-01 20:15

Ruby 1.9.3-p194 və Ruby Rails istifadə 3.2.6:

Request.fullpath sizin üçün işləməsə , request.env ["HTTP_REFERER"]

Aşağıdakı mənim hekayəm.

Müxtəlif nəzarətçilərdən məlumatları birləşdirən kümülatif səhifələr üçün, mövcud URL (brauzerindəki bir istifadəçi üçün ünvan çubuğunda göstərilir) ilə eyni problemi tapdım, məsələn http://localhost:3002/users/1/history/issues .

İstifadəçi müxtəlif problem növləri siyahısına keçə bilər. Bu siyahıların hamısı Ajax vasitəsilə müxtəlif / qismən nəzarətçilərdən (yenidən açmadan) yüklənir.

Sorun, Geri düyməsinin həm öz səhifəsində həm də ümumi səhifə tarixində düzgün işləməsi üçün hər bir siyahı maddədə Geri düyməsinə doğru yol qoymaq idi.

Request.fullpath istifadə etsəniz, son JavaScript sorğusunun yolunu qaytarır, bu da mənim aradığım URL deyildir.

Yəni son reloaded sorğunun URL'sini saxlayan request.env ["HTTP_REFERER"] istifadə etdim.

Bir qərar vermək üçün qismən bir qisimdir.

 - 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 авг. Serge Seletsky tərəfindən verilmiş cavab 10 Avqust. 2012-08-10 13:35 '12 at 13:35 2012-08-10 13:35

Bu Ruby on Rails 3.0 üçün işləyir və Rails-də Ruby-nin ən çox versiyası tərəfindən dəstəklənməlidir:

 request.env['REQUEST_URI'] 
12
14 апр. Tim Santeford tərəfindən verilmiş cavab 14 aprel 2012-04-14 08:59 '12 at 8:59 2012-04-14 08:59

Bu mövzuda təkliflərdən heç biri məni kədərlənməməyə kömək etdi, istisna olmaqla, kiminsə aradığını tapmaq üçün hata ayıklayıcısını istifadə etdiyi yerdən başqa.

Standart 404 və 500 əvəzinə bəzi xüsusi səhvlər səhifələrini yaratdım, amma gözlənilən /non-existing-mumbo-jumbo əvəzinə, request.url /404 ilə sona çatdı.

Mənə lazım idi

 request.original_url 
11
19 июня '12 в 17:15 2012-06-19 17:15 Cavab Frans tərəfindən 19 iyun 'da saat 17:15' də veriləcək 2012-06-19 17:15

Ruby üsulundan istifadə edə bilərsiniz:

 :root_url 

tam yol əldə edəcək: yerli: 3000 / l

9
21 июля '13 в 17:41 2013-07-21 17:41 cavab İdan Wender 21 iyul 'da 17:41' də verilir 2013-07-21 17:41

Əgər nisbi, yalnız bir domen olmadan demək, və sonra request.domain .

9
30 янв. Cavab 30 yanvarda goppe tərəfindən verilir 2010-01-30 01:37 '10 at 1:37 'da 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 cavab 11 may 2012-ci il tarixində saat 10: 00 -da verilmişdir

Rails 3-də istifadə edə bilərsiniz

 request.original_url 

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

6
13 марта '13 в 14:58 2013-03-13 14:58 cavabı 13-13 Mart 2013 tarixində saat 14:58 'da mikrobi tərəfindən verilir

Rails 4.0

request.original_url istifadə edə bilərsiniz, çıxış aşağıda göstərildiyi kimi olacaq.

 get "/articles?page=2" request.original_url # => "http://www.example.com/articles?page=2" 
4
26 марта '15 в 17:07 2015-03-26 17:07 cavab 26 dekabr '15 'də saat 17:07 ' da Arvind Singh verilir

Raylar üçün 3:

istək.fullpath

3
10 авг. Cavab Pankhuri 10 avqust tərəfindən verilir . 2013-08-10 11:43 '13 at 11:43 2013-08-10 11:43

Əgər müəyyən olmaq istəyirsinizsə, yəni hansı yola ehtiyacınız olduğunu bilirsiniz:

 link_to current_path(@resource, :only_path => false), current_path(@resource) 
3
02 янв. Cavab Victor S 02 Yanvar verilir. 2013-01-02 01:30 '13 saat 01:30 'da 2013-01-02 01:30

Sorğu URL'sini hər hansı bir istek parametresi olmadan alın.

 def current_url_without_parameters request.base_url + request.path end 
2
09 апр. Cavab Sinir 09 apr verilir . 2015-04-09 16:34 '15 at 4:34 pm 2015-04-09 16:34
 request.env["REQUEST_URI"] 

Raylar 2.3.4-də işləyir və digər versiyalar haqqında bilmir.

2
03 марта '14 в 0:15 2014-03-03 00:15 Cavab Satishakumar Awati tərəfindən 03.03.2014 tarixində 0:15 2014-03-03 00:15

Hər hansı bir relslər üçün istifadə edə bilərsiniz 3.2:

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

Mən hər yerdə işləyəcəyəm deyə düşünürəm

 "#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}" 
2
11 марта '14 в 8:09 2014-03-11 08:09 cavab 11 mart, '14 'də saat 8:09' da verilir. 2014-03-11 08:09

Siz istifadə edə bilərsiniz:

 request.full_path 

və ya

 request.url 

Ümid edirəm bu sizin probleminizi həll edir.

Salamlar

1
18 авг. Əli Həsən Mirzə 18 Avqust. 2015-08-18 08:41 '15 at 8:41 'də, 2015-08-18 08:41

Siz istifadə edə bilərsiniz

 request.original_url 

və ya

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

Mövcud url almaq.

1
02 дек. Cavab Robin Garg tərəfindən verilir 02 Dekabr. 2015-12-02 10:07 '15 'də saat 10:07 ' da

URI.parse(current_url) bir dəyişən təyin edə bilərsiniz, mən hələ bu cümlə görmürəm və mənim üçün çalışır.

0
04 марта '16 в 22:03 2016-03-04 22:03 cavab 04/0416 , 22:03 2016-03-04 22:03 tarixində verilir

Mütləq bir URL almaq üçün from the root aşağıdakı kimi göstərilə bilər

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

User_url köməkçisi protokol və host adı olan URL yaratır. User_path köməkçisi yolun yalnız bir hissəsini yaradır.

 users_url: http://localhost/users users_path: /users 
0
12 дек. Cavab Əhməd xamza tərəfindən verilmişdir 12 dekabr. 2012-12-12 17:41 '12 at 17:41 2012-12-12 17:41

Rails 4

Controller:

 def absolute_url request.base_url + request.original_fullpath end 

Action Mailer 4.2 sürüşkən nəzərəçarpacaq dəyişikliklər:

link_to və url_for şablonlarda default mütləq URL'leri yaradır; artıq yalnız_path: yanlış keçməlisiniz. (Commit)

Görünüş:

_url suffix istifadə _url , yaradılan URL mütləqdir. Nisbi URL almaq üçün _path istifadə edin.

 <%= link_to "Home", root_url %> 

Daha çox məlumat üçün linkə baxın:

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

0
17 апр. user3118220 tərəfindən verilmiş cavab 17 aprel 2015-04-17 15:25 '15 at 15:25 2015-04-17 15:25
  • 1
  • 2

əlaqədar digər suallar və ya bir sual