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?
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"}
You should url encode the parameters before passing them in
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With