2009-07-22 6 views
10

जब मैं कुछ बुनियादी ट्यूटोरियल के साथ अपने आरओआर कौशल विकसित कर रहा था तो मुझे एक समस्या का सामना करना पड़ा। जो मैं प्राप्त करने की कोशिश कर रहा हूं, इसमें अलग-अलग इंडेक्स या व्यक्तिगत दृश्य के साथ पोस्ट से संबंधित टिप्पणियां हैं। यह हिस्सा आसान था।रेल रूटिंग और यूआरआई टुकड़ा पहचानकर्ता

यहां एक कठिन बात आती है। मैं fragment identifier के साथ पते वापस करने के लिए चाहता हूं: http://example.com/posts/2#comment-4। यह मुझे redirect_to का उपयोग अपने सबसे सरल रूप में :anchor पैरामीटर के बिना करने की अनुमति देगा (जो चीजों को सरल रखने के रूबी मार्ग के खिलाफ होगा)।

यह कैसे करें? रेल 'डिफ़ॉल्ट व्यवहार में फेरबदल की

उत्तर

12

इसके बजाय, यह शायद बेहतर होगा एक सहायक विधि में अपनी आवश्यकताओं लपेट के लिए:

# in app/controllers/application_controller.rb 
class ApplicationController 
    helper :comment_link 

    def comment_link(comment) 
    post_comment_url(comment.post, comment, :anchor => "comment-#{comment.id}") 
    end 
end 

helper करने के लिए कॉल आप के रूप में अपने विचारों में है कि विधि का उपयोग करने की अनुमति देगा आपके नियंत्रकों के रूप में अच्छी तरह से।

+0

शायद यह अच्छा समाधान है, लेकिन मुझे इस रैपर का विचार पसंद नहीं है क्योंकि यह देशी post_comment_url विधि का उपयोग करने के सम्मेलन को तोड़ देगा। मैंने यह भी ध्यान दिया कि मुझे post_comment_path के लिए एक और सहायक की आवश्यकता होगी। चूंकि यह समाधान समाधान कर रहा है, मुझे नहीं लगता कि यह काफी शुष्क है। – samuil

+0

एक टिप्पणी के साथ एक पोस्ट यूआरएल लौटकर post_comment_url के लिए रेल सम्मेलन को परिभाषित करना एंकर को गुजरने की आवश्यकता के मुकाबले बड़े सिरदर्द का कारण बनता है: हर बार एंकर विकल्प (जो मैं वास्तव में कहूंगा कि वैसे भी बेहतर तरीका है, क्योंकि यह इरादा स्पष्ट रूप से स्पष्ट करता है ।) मैं लगभग कुछ भी करने के कारण के रूप में DRY का उपयोग करने के खिलाफ चेतावनी भी दूंगा। शब्द डीआरवाई शब्द Agile शब्द की तरह है: यह सिद्धांतों और प्रथाओं के संग्रह का वर्णन करता है, इसका मतलब है कि अपने आप पर लगभग कुछ भी नहीं है। – nakajima

+2

डीआरवाई सिद्धांतों का रहस्यमय संग्रह नहीं है। इसका मतलब है: प्रत्येक जानकारी कोड में केवल एक बार दिखाई देनी चाहिए, और डिज़ाइन को यह स्पष्ट करना चाहिए कि कहां है। यदि सहायक से बेहतर समाधान नहीं है (मैं अभी भी रेल के लिए काफी नया हूं, इसलिए कुछ डिफ़ॉल्ट तरीकों को बदलने और इसे चालाक मानकर समाधान को कार्यान्वित करना आसान नहीं है) मुझे विश्वास है कि यह कुछ में निहित होगा भविष्य रेल संस्करण। – samuil