ruby-on-rails - मैं रूबी पर रूबी में वर्तमान पूर्ण यूआरएल कैसे प्राप्त करूं?




url (25)

मैं अपने रूबी में रेल दृश्य पर वर्तमान पूर्ण यूआरएल कैसे प्राप्त कर सकता हूं?

request.request_uri केवल सापेक्ष यूआरएल देता है।


Answers

रेल 3 में आप उपयोग कर सकते हैं

request.original_url

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


आप उपयोग कर सकते हैं:

request.full_path

या

request.url

उम्मीद है कि यह आपकी समस्या का समाधान करेगा।

चियर्स


यदि आप विशिष्ट होना चाहते हैं, अर्थात्, आपको जिस मार्ग की आवश्यकता है उसे आप जानते हैं:

link_to current_path(@resource, :only_path => false), current_path(@resource)

मुझे लगता है कि अनुरोध .डोमेन काम करेगा, लेकिन अगर आप एक उप निर्देशिका में हैं जैसे blah.blah.com? ऐसा कुछ काम कर सकता है:

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

अपनी पथ संरचना के आधार पर पैरामीटर बदलें।

उम्मीद है की वो मदद करदे!


 url_for(params)

और आप आसानी से कुछ नया पैरामीटर जोड़ सकते हैं:

url_for(params.merge(:tag => "lol"))

रेल पर रूबी के लिए 3:

request.url
request.host_with_port

मैंने एक डीबगर सत्र निकाल दिया और अनुरोध ऑब्जेक्ट पूछताछ की:

request.public_methods

आप url_for(:only_path => false) उपयोग कर सकते हैं


मुझे लगता है कि रेल 3.0 विधि पर रूबी अब request.fullpath


पूर्ण यूआरएल प्राप्त करने के लिए जिसका मतलब है कि from the root इसे इस तरह प्रदर्शित किया जा सकता है

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

Users_url सहायक एक यूआरएल उत्पन्न करता है जिसमें प्रोटोकॉल और होस्ट नाम शामिल होता है। उपयोगकर्ता_पैथ सहायक केवल पथ भाग उत्पन्न करता है।

users_url: http://localhost/users
users_path: /users

वर्तमान 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


ऐसा लगता है कि रेलवे 3 पर रुबी में request_uri को बहिष्कृत किया गया है।

Using #request_uri is deprecated. Use fullpath instead.

रेल के लिए 3:

request.fullpath


बिना किसी क्वेरी पैरामीटर के अनुरोध यूआरएल प्राप्त करने के लिए।

def current_url_without_parameters
  request.base_url + request.path
end

रेल 4

नियंत्रक:

def absolute_url
  request.base_url + request.original_fullpath
end

एक्शन मेलर 4.2 रिलीज में उल्लेखनीय बदलाव:

link_to और url_for डिफ़ॉल्ट रूप से टेम्पलेट्स में पूर्ण URL उत्पन्न करते हैं, अब केवल_पथ को पास करने के लिए आवश्यक नहीं है: झूठी। (कमिट)

राय:

यदि आप _url प्रत्यय का उपयोग करते हैं, तो जेनरेट किया गया यूआरएल पूर्ण है। एक सापेक्ष यूआरएल पाने के लिए _path का प्रयोग करें।

<%= link_to "Home", root_url %>

अधिक जानकारी के लिए, यहां जाएं:

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


यदि रिश्तेदार से, आप केवल डोमेन के बिना मतलब है, तो request.domain


यदि आप रेल 3.2 या रेल 4 का उपयोग कर रहे हैं तो आपको वर्तमान यूआरएल प्राप्त करने के लिए request.original_url का उपयोग करना चाहिए।

विधि के लिए दस्तावेज़ीकरण http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url पर है लेकिन यदि आप उत्सुक हैं तो कार्यान्वयन है:

def original_url
  base_url + original_fullpath
end

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)

रेल 3.2 या रेल 4+ के लिए

वर्तमान यूआरएल प्राप्त करने के लिए आपको request.original_url का उपयोग करना चाहिए।

यह विधि original_url विधि पर प्रलेखित है, लेकिन यदि आप उत्सुक हैं, तो कार्यान्वयन है:

def original_url
  base_url + original_fullpath
end

रेल 3 के लिए:

आप "#{request.protocol}#{request.host_with_port}#{request.fullpath}" लिख सकते हैं, क्योंकि request.url अब बहिष्कृत है।

रेल 2 के लिए:

आप request.url बजाय request.url लिख सकते हैं। यह मेजबान के साथ प्रोटोकॉल (आमतौर पर http: //) को जोड़ता है, और request_uri आपको पूरा पता देने के लिए।


आप या तो उपयोग कर सकते हैं

request.original_url 

या

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

वर्तमान यूआरएल पाने के लिए।


request.env["REQUEST_URI"]

रेल 2.3.4 में काम करता है और अन्य संस्करणों के बारे में पता नहीं है।


आप रेल 3.2 के लिए किसी का भी उपयोग कर सकते हैं:

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

मुझे लगता है कि यह हर जगह काम करेगा

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

धागे में दिए गए सुझावों में से कोई भी मुझे दुःख की मदद नहीं करता, सिवाय इसके कि किसी ने कहा कि उसने डीबगर का इस्तेमाल वह ढूंढने के लिए किया था जिसे उसने देखा था।

मैंने मानक 404 और 500 के बजाय कुछ कस्टम त्रुटि पेज बनाए हैं, लेकिन request.url अपेक्षित /non-existing-mumbo-jumbo बजाय /404 में समाप्त हुआ है।

मुझे उपयोग करने के लिए क्या चाहिए था

request.original_url

मुझे एप्लिकेशन URL आवश्यकता थी लेकिन उपनिर्देशिका के साथ। मैंनें इस्तेमाल किया:

root_url(:only_path => false)

आप नियमित अभिव्यक्तियों का उपयोग कर सकते हैं, जैसे स्ट्रिंग का प्रकार ढूंढना:

case foo
when /^(true|false)$/
   puts "Given string is boolean"
when /^[0-9]+$/ 
   puts "Given string is integer"
when /^[0-9\.]+$/
   puts "Given string is float"
else
   puts "Given string is probably string"
end

रुबी का case इसके लिए समानता ऑपरेंड === उपयोग करेगा (धन्यवाद @ जिमडेविले)। अतिरिक्त जानकारी " रूबी ऑपरेटर " पर उपलब्ध है। यह @mmdemirbas उदाहरण (पैरामीटर के बिना) का उपयोग करके भी किया जा सकता है, केवल इस दृष्टिकोण के लिए यह दृष्टिकोण क्लीनर है।





ruby-on-rails ruby url