2013-12-18 88 views
2

我試圖在Ruby on Rails中傳遞一個音頻URL作爲參數,並且使用Google搜索「如何在url中傳遞url」已被證明是有問題的。問題是,我只能得到url返回減去一個關鍵的正斜槓。在Ruby on Rails路由中傳遞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開頭。)如何保留我的url的語法?還是有更好的方法來將這個參數一起傳遞?

回答

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"} 
2

你應該通過他們在

+0

是的點部,謝謝你,非常接近。雖然,現在我沒有得到.mp3後綴。 –

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 
  1. constraints只會匹配url的正則表達式。
  2. format => false會忽略網址