2011-09-01 15 views
6

मैं उन फ़ाइलों तक पहुंच के लिए रेल का उपयोग कर रहा हूं जिन्हें केवल वेब ऐप के कुछ उपयोगकर्ताओं को ही सेवा दी जानी चाहिए। ऐसा करने के लिए मेरे पास एक नियंत्रक विधि है जो उस फ़ाइल के बारे में जानकारी स्वीकार करती है जिसे वे एक्सेस करना चाहते हैं, उनके प्रमाणीकरण की जांच करता है, और फिर यदि वे अधिकृत हैं तो उन्हें भेजने के लिए 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' 

मुझे लगता है कि समस्या है मेरी रूटिंग, लेकिन मुझे वास्तव में समझ में नहीं आता कि अवधि कैसे मार्गों को प्रभावित करती है। कोई विचार?

:constraints => { :resource => /.*/ } 
रेल 2 के लिए

(AFAIK):

उत्तर

8

रेल के लिए आप अपने मार्ग को यह जोड़ सकते हैं 3

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

रेल में से एक के बिना एक फॉर्मेट स्पेसिफायर रूप .txt व्याख्या करने की कोशिश करेंगे उन।

+0

बिल्कुल मुझे जो चाहिए, धन्यवाद! – Matthew

संबंधित मुद्दे