मैं अपनी रूबी में रेल दृश्य पर वर्तमान निरपेक्ष URL कैसे प्राप्त कर सकता हूं ?
request.request_uri
केवल रिश्तेदार रिटर्न यूआरएल ।
मैं अपनी रूबी में रेल दृश्य पर वर्तमान निरपेक्ष URL कैसे प्राप्त कर सकता हूं ?
request.request_uri
केवल रिश्तेदार रिटर्न यूआरएल ।
जवाबों:
आपको request.original_url
वर्तमान URL प्राप्त करने के लिए उपयोग करना चाहिए ।
इस विधि पर दर्ज है original_url विधि है, लेकिन अगर आप उत्सुक हैं, दिया गया है:
def original_url
base_url + original_fullpath
end
आप लिख सकते हैं "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, क्योंकि request.url
अब पदावनत हो गया है।
आप लिख सकते हैं request.url
के बजाय request.request_uri
। यह होस्ट के साथ प्रोटोकॉल (आमतौर पर http: //) को जोड़ता है, और आपको पूरा पता देने के लिए request_uri से अनुरोध करता है।
fullpath
में प्रोटोकॉल / डोमेन / पोर्ट शामिल नहीं है! यह एक पूर्ण URL नहीं है!
"http://#{request.host+request.fullpath}"
काम करेगा या अन्यथा, (यदि पोर्ट महत्वपूर्ण है)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
पदावनत है? प्रस्तावित समाधान कहने का एक लंबा तरीका है जो request.url
पहले से ही करता है; कार्यान्वयन केवल प्रोटोकॉल है + host_with_port + fullpath ( github.com/rails/rails/blob/… )
आप उपयोग कर सकते हैं url_for(only_path: false)
चेतावनी चेतावनी: #request_uri का उपयोग करना पदावनत है । इसके बजाय फुलपैथ का उपयोग करें।
request.uri
और यह पहले से ही इस प्रश्न में कई बार इंगित किया गया है, लेकिन ... ठीक है, धन्यवाद
यदि आप रेल 3.2 या रेल 4 का उपयोग कर रहे हैं, तो आपको request.original_url
वर्तमान URL प्राप्त करने के लिए उपयोग करना चाहिए ।
विधि के लिए दस्तावेज़ीकरण http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url पर है लेकिन यदि आप इसे लागू करने के लिए उत्सुक हैं:
def original_url
base_url + original_fullpath
end
आप वर्तमान URL को वापस करने और अन्य मापदंडों में विलय करने की अनुमति देने के लिए ApplicationController में इस current_url विधि को जोड़ सकते हैं
# 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
उदाहरण उपयोग:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
url_for params.merge(:format => "PDF", :only_path => false)
link_to
तो बस उपयोग कर सकते हैं params.merge
और url_for
पूरी तरह से छोड़ सकते हैं
रूबी में पटरियों पर 3.1.0.rc4:
request.fullpath
fullpath
absolute URL
अनुरोध किए गए मूल पोस्टर के रूप में प्रदान नहीं करता है ।
url_for(params)
और आप आसानी से कुछ नए पैरामीटर जोड़ सकते हैं:
url_for(params.merge(:tag => "lol"))
मुझे लगता है कि request.domain काम करेगा, लेकिन क्या होगा अगर आप blah.blah.com जैसी उप निर्देशिका में हैं? कुछ इस तरह काम कर सकता है:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
अपने पथ संरचना के आधार पर मापदंडों को बदलें।
उम्मीद है की वो मदद करदे!
रूबी 3.2.3-p194 और रूबी का उपयोग रेल 3.2.6 पर:
यदि request.fullpath आपके लिए काम नहीं करता है, तो request.env का प्रयास करें ["HTTP_REFERER"]
यहाँ नीचे मेरी कहानी है।
मुझे संचयी पृष्ठों के लिए वर्तमान URL (जो उसके ब्राउज़र में उपयोगकर्ता के लिए पता बार में दिखाया गया है) का पता लगाने के साथ इसी तरह की समस्या थी, जो विभिन्न नियंत्रकों से जानकारी को जोड़ती है, उदाहरण के लिए http://localhost:3002/users/1/history/issues
,।
उपयोगकर्ता विभिन्न प्रकार की समस्याओं की सूची में स्विच कर सकता है। उन सभी सूचियों को अजाक्स के माध्यम से विभिन्न नियंत्रकों / भाग (बिना पुनः लोड किए) से लोड किया जाता है।
समस्या सूची के प्रत्येक आइटम में बैक बटन के लिए सही रास्ता निर्धारित करने की थी ताकि बैक बटन अपने स्वयं के पृष्ठ और संचयी पृष्ठ इतिहास दोनों में सही ढंग से काम कर सके ।
यदि मैं रिक्वेस्ट का उपयोग करता हूं। निफ्टपैथ , यह अंतिम जावास्क्रिप्ट अनुरोध का मार्ग देता है जो निश्चित रूप से वह URL नहीं है जिसकी मुझे तलाश है।
इसलिए मैंने request.env ["HTTP_REFERER"] का उपयोग किया, जो अंतिम पुनः लोड किए गए अनुरोध के URL को संग्रहीत करता है।
यहां निर्णय लेने के लिए आंशिक रूप से एक अंश दिया गया है
- 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
रूबी 3.0 पर रूबी के लिए यह काम करता है और रूबी के अधिकांश संस्करणों को रीलों पर समर्थित होना चाहिए:
request.env['REQUEST_URI']
धागे में यहाँ किसी भी सुझाव ने मेरी मदद नहीं की, सिवाय एक के जहां किसी ने कहा कि उसने डिबगर का उपयोग किया जो वह ढूंढता था।
मैंने मानक 404 और 500 के बजाय कुछ कस्टम त्रुटि पृष्ठ बनाए हैं, लेकिन अपेक्षित के बजाय request.url
समाप्त हो गया ।/404
/non-existing-mumbo-jumbo
मुझे जो उपयोग करने की आवश्यकता थी वह था
request.original_url
आप रूबी विधि का उपयोग कर सकते हैं:
:root_url
बेस यूआरएल के साथ पूरा रास्ता मिलेगा:
localhost:3000/bla
:root_url
, तो पूर्ण यूआरएल प्राप्त करने के लिए मैं उन परमपदों को कैसे प्रतिबंधित कर सकता हूं, जिन्हें मैं पूर्ण url में देता हूं ? मान लें कि मैं किसी तरह से यूथिन हूं some_method(:products_brand_url, brand: brand, entity_name: "brand")
और some_method
इसे परिभाषित किया गया है कि 'डिम some_method (मार्ग, opts = {}) अंत `मैं अपने मार्ग की तरह नहीं देखना चाहता - http://localhost:3000/brands/brand_name?&entity_name="brand"
। मैं चाहता हूं कि मार्ग जैसा दिखे http://localhost:3000/brands/brand_name
। मैं सिर्फ entity_name
ऑप्स हैश का हिस्सा बनना चाहता हूं न कि पूर्ण यूआरएल के लिए एक परम के रूप में।
root_url
।
रेल 3 में आप उपयोग कर सकते हैं
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
रेल्स 4.0
आप उपयोग कर सकते हैं request.original_url
, आउटपुट उदाहरण के नीचे दिया जाएगा
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
रेल 3.2 या रेल 4 के लिए बस इस तरह से "request.original_url" संदर्भ प्राप्त करें: मूल URL विधि
रेल के लिए 3 के रूप में request.url पदावनत है। हम सहमति देकर पूर्ण मार्ग प्राप्त कर सकते हैं
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
रेल के लिए २
request.url
request.env["REQUEST_URI"]
रेल में काम करता है 2.3.4 परीक्षण किया और अन्य संस्करणों के बारे में पता नहीं है।
आप या तो उपयोग कर सकते हैं
request.original_url
या
"#{request.protocol}#{request.host_with_port}"
वर्तमान URL प्राप्त करने के लिए।
आप उपयोग कर सकते हैं:
request.full_path
या
request.url
उम्मीद है कि यह आपकी समस्या का समाधान करेगा।
चियर्स
निरपेक्ष URL प्राप्त करने के लिए जिसका अर्थ है कि from the root
इसे इस तरह प्रदर्शित किया जा सकता है
<%= link_to 'Edit', edit_user_url(user) %>
Users_url सहायक एक URL बनाता है जिसमें प्रोटोकॉल और होस्ट नाम शामिल हैं। उपयोगकर्ता_पथ सहायक केवल पथ भाग उत्पन्न करता है।
users_url: http://localhost/users
users_path: /users