2010-06-01 14 views
14

रेल को google.com (उदा। /some_action/google.com) जैसे मूल्य में एक बिंदु के साथ परम पर विचार करने के लिए मजबूर करने के लिए कैसे मजबूर करें और "id" => "google", "format"=> "com" नहीं?रेल - "डॉट" (उदा। /google.com) के साथ पैराम

पैरामीटर मान "id" => "google.com"

उत्तर

25

डिफ़ॉल्ट रूप से होना चाहिए, गतिशील क्षेत्रों डॉट्स को स्वीकार नहीं करते - इस वजह से डॉट स्वरूपित मार्गों के लिए एक विभाजक के रूप में प्रयोग किया जाता है। हालांकि, आप मार्ग पैरामीटर में कुछ regex आवश्यकताओं को जोड़ सकते हैं। यहां, आप पैरामीटर में बिंदुओं को अनुमति देना चाहते हैं।

match 'some_action/:id' => 'controller#action', :constraints => { :id => /[0-z\.]+/ } 

और में 2.3 रेल:

map.connect 'some_action/:id', :controller => 'controller', :action => 'action', :requirements => { :id => /[0-z\.]+/ } 

Relevent rails guides section

+0

अंत में Rails3 काम कर समाधान का उपयोग करें! धन्यवाद। – lzap

4

रेल 4 में मैं प्रयोग किया है:

get 'operation/:p1/:p2', to: 'operation#get', constraints: { p1: /[^\/]+/, p2: /[^\/]+/ } 

यह दोनों पैरामीटर में किसी भी चरित्र (अलावा अन्य की अनुमति देता है '/')

+1

यह गैर-लैटिन यूआरएल के साथ भी काम करता है! – kadrian

1

और जब संसाधनों अंकन के साथ प्रयोग किया, तो वह ऐसा किया जा सकता है:

resources :post, 
       only: [ :create, :index, :destroy ], 
       constraints: { id: /[0-z\.]+/ } 

रेल में परीक्षण किया गया 4.1

0

हम समान मामला है जब हम एक API पथ का कुछ हिस्सा निकाल दिया था। असल में हम हमारे मार्गों

match '/api/app/v1/*path', to: redirect(path: '/api/v1/%{path}'), via: :all 

इस में /api/v1/*

हम इस डाल करने के लिए /api/app/v1/* से चला गया कुछ मार्गों कि पथ के साथ समाप्त हो गया डॉट्स सहित पैरामीटर के अलावा सब ठीक था। जैसे /api/v1/foo/00.00.100 जहां .100format में पार्स गया और शेष परम केवल मूल्य 00.00

हम परम पर कुछ बाधा के साथ इस पहरा था।

put '/api/app/v1/foo/:version', 
    constraints: { version: /([0-9]+)\.([0-9]+)\.([0-9]+)/ }, 
    to: redirect('/api/v1/foo/%{version}') 

संपादित करें: हम रेल 5

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