2011-09-01 25 views
6

我正在使用rails來保護對僅需要向Web應用程序的某些用戶提供的文件的訪問。要做到這一點,我有一個控制器方法,接受有關他們想要訪問的文件的信息,檢查他們的授權,然後如果他們被授權使用x-sendfile將它發送給他們。除了一個障礙之外,這個概念可以正常工作:如果他們請求一個資源。在我的路由不知道處理它。在我的路線文件我有:導軌路由和帶有'。'的參數在他們

match 'atb_resources/:guid/:resource' => 'atb_resources#show', :as => :get_atb_resource, :via => :get 

和後來如果我嘗試這在我的規格:

get 'show', :guid => 'some_guid', :resource => 'blah.txt' 

規範失敗了:

Failure/Error: get 'show', :guid => @atb.guid, :resource => 'blah.txt' 
ActionController::RoutingError: 
    No route matches {:guid=>"ABCDEFG5", :resource=>"blah.txt", :controller=>"atb_resources", :action=>"show"} 

但這是罰款:

get 'show', :guid => 'some_guid', :resource => 'blahDOTtxt' 

我假設問題是與我的路由,但我真的不明白週期如何影響路線。有任何想法嗎?

回答

8

對於Rails 3中,你可以添加到您的路線:

:constraints => { :resource => /.*/ } 

爲Rails 2(據我所知):

:requirements => { :resource => /.*/ } 

Rails會盡量解釋.txt作爲格式說明沒有之一那些。

+0

正是我需要的,謝謝! – Matthew