2012-01-03 18 views
6

मैं अपने Category मॉडल में to_param विधि ओवरराइट हैरेल में रूटिंग। URL में डॉट्स

def to_param 
    name 
end 

और routes.rb

get '/:id' => 'categories#show', :as => :category 

name पैरामीटर वाले बिंदु (foobar) शामिल नहीं है जब, सब ठीक काम करता है, लेकिन जब यह करता है (f.o.o.b.a.r) मुझे एक त्रुटि No route matches [GET] मिलती है। तो मेरा सवाल यह है: क्या पैरामीटर के नाम के रूप में रूटिंग में बिंदुओं का उपयोग करना संभव है? या मैं इस उद्देश्य को पूरा करने के लिए क्या कर सकता हूं, शायद कुछ हुक या कुछ। किसी भी मदद की सराहना की है।

उत्तर

15

आप इस मार्ग के लिए बाधाओं को बदल सकते हैं:

get ':/id' => "categories#show", :as => :category, :constraints => { :id => /[\w+\.]+/ } 

इस मार्ग अब किसी भी किसी भी शब्द चरित्र या एक डॉट युक्त स्ट्रिंग के लिए :id से मेल खाएगी।

+6

कि regexp केवल उसके बाद एक बिंदु के साथ एक शब्द से मेल खाएगा। आपको '/ [\ w \।] + /' का उपयोग करने की आवश्यकता है। –

+0

डायलन: धन्यवाद, मैंने इसे अपडेट किया है। –

+0

मुझे नहीं पता कि यह एक समाधान है। यदि URL में गैर शब्द वर्ण हैं, तो यह टूट जाता है, जिसमें कम से कम '%' होने की संभावना है और आपके पास कम से कम 1 डॉट होना चाहिए। यह सिर बंद करने से सिरदर्द का इलाज करने जैसा है। यह सही समाधान है: http://stackoverflow.com/questions/5369654/why-do-routes-with-a-dot-in-a-parameter-fail-to-match – believesInSanta

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