2010-04-13 14 views
16

मैं रेल में इस तरह यूआरएल प्राप्त करने के लिए कोशिश कर रहा हूँ:आईडी + स्लग नाम

http://localhost/posts/1234/post-slug-name 

http://localhost/posts/1234 
के बजाय दोनों आईडी और स्लग नाम किसी के साथ

या

http://localhost/posts/post-slug-name 

(अभी मैं सिर्फ नाम URL में काउंटर है, इसलिए इस हिस्से खत्म हो गया है)। मैं यह कैसे कर सकता हूँ?

युपीडी

मैं इस पर एक लेख मिला: http://augustl.com/blog/2009/styling_rails_urls/, /id/slug के बजाय यह /id-slug जो मेरे लिए पूरी तरह से काम करता है का उपयोग करने के सुझाव देते हैं, तो मैं इस के साथ जायेंगे।

उत्तर

9

आप अपने संसाधन मार्ग के अतिरिक्त Route Globbing के साथ एक नियमित मार्ग जोड़ना चाहते हैं (निश्चित रूप से यह सुनिश्चित करना कि आपका posts मार्ग परिभाषित किए गए हैं)। उदाहरण के लिए,

map.resources :posts 
map.connect '/posts/:id/*slugs', :controller => 'posts', :action => 'show' 
30

रेल के पास एसईओ अनुकूल यूआरएल के लिए कुछ अंतर्निहित समर्थन है।

आप फ़ॉर्म में यूआरएल बना सकते हैं: to_param विधि को अपने मॉडल में बस ओवरराइड करके "आईडी-शीर्षक"।

यह मेरा परियोजनाओं में से एक से है और आईडी, श्रेणी नाम और मॉडल का नाम के साथ एक यूआरएल बनाता है:

def to_param 
    "#{id}-#{category.name.parameterize}-#{name.parameterize}" 
end 

रेल बहुत चालाक सादा आईडी में वापस जब आप अपने नियंत्रक कार्रवाई का उपयोग इस निकालने के लिए है , इसलिए निम्नलिखित बस काम करता है:

def show 
    @model = Model.find(params[:id]) 
    render :action => "show" 
end 
+0

हां, यह मेरे पास यूपीडी में है। मैं वास्तव में भी इस दृष्टिकोण का इस्तेमाल किया। – Vitaly

+0

उत्कृष्ट !! महान काम किया! धन्यवाद! – yorch

7

friendly_id का उपयोग करें। इसमें एक अच्छी सुविधा है: आप पुराने यूआर को तोड़ने के बिना अपना यूआरएल अपडेट कर सकते हैं।

जेनरेटिंग यूआरएल मेरे लिए काम नहीं कर रहा है। मैं तो बस मॉडल में एक छोटी सी विधि जोड़ा

def to_param 
    self.friendly_id 
end 
0

stringex मणि ActsAsUrl एक विशेषता के URI के अनुकूल अभ्यावेदन बनाने के लिए होता है

https://github.com/rsl/stringex

यह भी एक Unidecoder पुस्तकालय, जो यूनिकोड में बदल सकते हैं शामिल ASCII के लिए।

0

I wrote a post रेल 3 में स्लग के बारे में। यह सुंदर यूआरएल और इससे भी अधिक प्रदान करता है, आपकी साइट को यादृच्छिक स्क्रिप्ट से सुरक्षित करता है जो आईडी को बढ़ाकर जानकारी मांगता है। इसके अलावा यह डेटाबेस में स्लग को बचाने से बचाता है।

4

मुझे पता है कि सवाल काफी पुराना है, लेकिन मुझे लगता है कि यह अभी भी कुछ हितों के हकदार है और कोई भी जवाब अद्यतित नहीं है या ओपी की तलाश करने के लिए एक तरीका प्रदान करता है (यानी http://localhost/posts/1234/post-slug-name)।

मार्गों में।विचारों

<%= link_to slugged_post_path(post, post.name.parameterize) %> 

आप विचारों में parameterize बुला से बचने के लिए अपने मॉडल में एक स्लग विधि निर्धारित कर सकते हैं में फिर आरबी

get 'posts/:id/:slug', to: 'posts#show', as: 'slugged_post' 

+1

जो 'link_to' कॉल में' slugged_post_path' होना चाहिए। – Rystraum

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