इन सभी समाधानों में find_by_name
का उपयोग किया जाता है, जो निश्चित रूप से उस कॉलम पर एक अनुक्रमणिका होने की आवश्यकता होती है और आवश्यकता होती है कि वे अद्वितीय हों। एक बेहतर समाधान जिसे हमने उपयोग किया है, सौंदर्य की एक छोटी राशि का त्याग करना, विक्रेता नाम को इसके आईडी के साथ उपसर्ग का उपयोग करना है। इसका मतलब है कि आपके पास अपने नाम कॉलम पर एक अनुक्रमणिका नहीं है और/या विशिष्टता की आवश्यकता है।
vendor.rb
def to_param
normalized_name = name.gsub(' ', '-').gsub(/[^a-zA-Z0-9\_\-\.]/, '')
"#{self.id}-#{normalized_name}"
end
तो यह आप यूआरएल
/1-एक्मे की तरह देना होगा
/19-सेफवे
आदि
फिर अपने शो में
कार्रवाई आप अभी भी
0 का उपयोग कर सकते हैं
Vendor.find(params[:id])
कि विधि परोक्ष अपने तर्क पर .to_i
फोन करेगा, और इस तरह एक स्ट्रिंग पर to_i
बुला हमेशा संख्यात्मक उपसर्ग लौट सकते हैं और उस बिंदु पर शेष पाठ अपने सभी फुलाना छोड़ देंगे के रूप में।
ऊपर मानता है कि आपके /:controller/:action/:id
की डिफ़ॉल्ट मार्ग का उपयोग कर रहे हैं, जो अपने यूआरएल
की तरह लग रहे हो जाएगा
/विक्रेताओं/दिखाएँ/1-एक्मे
लेकिन अगर आप चाहते हैं उन्हें सिर्फ देखने के लिए
/1-एक्मे
फिर
map.show_vendor '/:id', :controller => 'vendors', :action => 'show'
की तरह एक मार्ग है
यह इंगित करेगा कि यह बहुत सारे यूआरएल को निगल देगा जो आप शायद इसे भी नहीं चाहते हैं। चेतावनी लो
स्रोत
2009-04-07 05:10:17
हाय पर एक नज़र भी ले लो, इस के लिए धन्यवाद - "यूआरएल के बहुत से निगलने का मतलब क्या है जिसे आप नहीं चाहते हैं?" ओह, तुम्हारा मतलब है कि मार्ग उस नियंत्रक को बुलाए जाने वाले बहुत कुछ को बदल देगा? मैं विक्रेताओं/शो/1-Acme के साथ ठीक हूँ ... यह एसईओ को कैसे प्रभावित करता है? – AFG
हां, '/: आईडी' बहुत सी चीजों से मेल खाएगा, इसलिए आपको '/ about', '/ contact' आदि के लिए कई नामित मार्ग होंगे। एसईओ के लिए, मुझे लगता है कि संख्या उपसर्ग नगण्य है । –
तो मैं विक्रेताओं/सूची के लिए एक नामित मार्ग कैसे बनाऊंगा जो 'सूची' नामक विक्रेता_controller.rb में कार्रवाई के अनुरूप होगा? धन्यवाद। अन्यथा यह अच्छा लग रहा है। – AFG