Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass a url as a parameter in Ruby on Rails route

I'm trying to pass an audio URL as a parameter in Ruby on Rails, and googling "how to pass a url in a url" has proved to be problematic. The problem is that I can only get the url to return minus a crucial forward slash.

My route looks like:

get 'my_page/:title/*url', to: 'my_page', action: 'show'

The variable is defined in the controller like so:

@url=params[:url]

So the request would look like:

www.my_app.com/my_page/im_a_title/http://im_a_url.mp3

The url variable, however, ultimately results missing a slash after the prefix:

http:/im_a_url.mp3 <--notice the missing forward slash

Of note, the construction of the urls varies enough that it would be cumbersome to construct them. (Some begin with http and some https, for instance.) How do I preserve the syntax of my url? Or is there a better way to pass this parameter all together?

like image 283
Bailey Smith Avatar asked Jan 12 '23 16:01

Bailey Smith


2 Answers

Why don't you pass the url as a required parameter. That way you can use the built-in to_query.

get 'files/:title' => 'files#show'

and in files controller

class FilesController < ApplicationController

  def show
    url = params.fetch(:url) # throws error if no url
  end

end

You can encode the url and unencode like so:

{ url: 'http://im_a_url.mp3' }.to_query
# => "url=http%3A%2F%2Fim_a_url.mp3"
Rack::Utils.parse_query "url=http%3A%2F%2Fim_a_url.mp3"
# => {"url"=>"http://im_a_url.mp3"}
like image 137
AJcodez Avatar answered Jan 18 '23 00:01

AJcodez


You should url encode the parameters before passing them in

like image 39
Yuriy Goldshtrakh Avatar answered Jan 18 '23 00:01

Yuriy Goldshtrakh