我正在尝试将音频URL作为Ruby on Rails中的参数传递,并且谷歌搜索“如何在URL中传递URL”已被证明是有问题的。问题是我只能获得返回的url减去一个关键的正斜杠。
我的路线如下:
get 'my_page/:title/*url', to: 'my_page', action: 'show'
变量在控制器中定义如下:
@url=params[:url]
所以请求看起来像是:
www.my_app.com/my_page/im_a_title/http://im_a_url.mp3
然而,url变量最终导致在前缀后丢失斜杠:
http:/im_a_url.mp3 <--notice the missing forward slash
值得注意的是,网址的构造变化足以构建它们很麻烦。 (例如,一些以http和一些https开头。)如何保留我的网址的语法?或者是否有更好的方法将所有参数一起传递?
答案 0 :(得分:4)
为什么不将url作为必需参数传递。这样您就可以使用内置的to_query
。
get 'files/:title' => 'files#show'
并在文件控制器中
class FilesController < ApplicationController
def show
url = params.fetch(:url) # throws error if no url
end
end
你可以像这样对url和unencode进行编码:
{ 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"}
答案 1 :(得分:2)
您应该在将参数传递到
之前对其进行url编码答案 2 :(得分:0)
Rails 4
match 'my_page/:title/:url', to: 'my_page#show' , constraints: { url: /[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}/}, via: :get, :format => false
constraints
只匹配网址的正则表达式。 format => false
将忽略网址