Search code examples
ruby-on-railsurluriquery-stringquerystringparameter

Get query string from extract URL if exists


I'm trying to get the value of a variable, prop, in a query string from a passed URL similar to what the gentleman in this thread did.

It works if there's a query string in the URL but if there isn't I get CGI.parse undefined method 'split' for nil:NilClass error. I did research and the problem is because there is no query to split.

So my question is how can I test for the presence of any query string and then run it through CGI.parse to see if the prop query string is one of them? I assume I could probably do it through Regex but I was hoping there was a Rails solution.

Any help would be appreciated.

Thanx

Code: I'm also trying to get the domain name of the URL referrer. That is why I have that variable in there.

url = request.env['HTTP_REFERER']
encoded_url = URI.encode(url.to_s)
parse = URI.parse(encoded_url)
domain = parse.host
puts domain
params = CGI.parse(parse.query)
puts params['prop'].first

UPDATE: I got the error to go away by adding the attached code. But I'm still wondering if there's a better Rails solution. I'm still fairly new to Rails, so I want to make sure I'm doing it correctly.

if encoded_url.include? "?prop"
    params = CGI.parse(parse.query)
    puts params['prop'].first
end

Solution

  • The keys in query string in a URL can be accessed using params[] hash, even if the URL is not present inside the app itself. This is how it is convenient for rails to communicate with the outside world as well. Note that rails treats all the HTTP verbs equally when it comes to usage of params[] hash.
    Usage: puts params[:your_key]