2011-12-23 22 views
11

रूबी ऑन रेल्स 3 ट्यूटोरियल में, कोड का उपयोग करता है:रेल में रूटिंग करते समय मिलान का उपयोग क्यों करें?

match '/signup', :to => 'users#new' 
match '/signin', :to => 'sessions#new' 
match '/signout', :to => 'sessions#destroy' 

match '/contact', :to => 'pages#contact' 
match '/about', :to => 'pages#about' 
match '/help', :to => 'pages#help' 

बल्कि

get '/signup', :to => 'users#new' 
get '/signin', :to => 'sessions#new' 
get '/signout', :to => 'sessions#destroy' 

get '/contact', :to => 'pages#contact' 
get '/about', :to => 'pages#about' 
get '/help', :to => 'pages#help' 

से भले ही सभी मार्गों केवल HTTP क्रिया प्राप्त करना चाहते हैं। get (या :via => [:get]match पर) का उपयोग क्यों न करें और अभ्यास की स्थिति के रूप में रूटिंग कार्रवाई को सीमित करें?

उत्तर

22

मैं इसे match के बजाय get [...] का उपयोग करने का सबसे अच्छा अभ्यास मानता हूं। जैसा कि आपने पहले ही सही तरीके से उल्लेख किया है, match दोनों जीईटी और पोस्ट मार्ग बनाएगा। अगर आपको उनकी आवश्यकता नहीं है तो उन्हें क्यों बनाएं?

सही matchers (प्राप्त या पोस्ट) का उपयोग करके अपने मार्गों को साफ रखता है और आपके आवेदन के अवांछित व्यवहार को रोकने में मदद करता है। बाद वाला बिंदु विशेष रूप से POST मार्गों के लिए सच है, जहां आप अपने वेबपृष्ठ पर गोपनीय रूप से एक GET अनुरोध लिंक नहीं रखना चाहते हैं जिसके बाद खोज बॉट का अनुसरण किया जा सकता है।

अद्यतन [2013-05-12]: रेल से 4.0 के बाद आप अब required to explicitly specifiy the request method हैं। रेलवे 4.0 अपडेट के लिए

+5

+1। पुराना उत्तर अपडेट करने के लिए समय निकालने के लिए धन्यवाद। – bengem

+0

अब अनुमान लगाएं कि 'मिलान' बेहतर है यदि आपके पास एकाधिक http क्रियाओं के लिए उपयोग किए जाने वाले मार्ग हैं। –

+0

@PetrosKyriakou वह क्यों है? मुझे पता है कि समय-समय पर, फ्रेमवर्क शिफ्ट का उपयोग करने में सर्वोत्तम प्रथाएं। हालांकि, मुझे नहीं लगता कि यह मामला यहां है। यदि आप 'get'and' post'routes दोनों प्रदान करना चाहते हैं, तो उन्हें 'get' और' post' कीवर्ड का उपयोग करके अलग से परिभाषित करें। जैसा कि अद्यतन उत्तर में बताया गया है, रेल अब आपको अनुरोध विधि को परिभाषित करने के लिए भी मजबूर करता है। मुझे इस संबंध में हालिया बदलावों से अवगत नहीं है। – emrass

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