2011-02-12 8 views
30

posts और comments के साथ एक ब्लॉग की कल्पना करें। एक व्यक्तिगत टिप्पणी का URL posts/741/comments/1220 हो सकता है।रेलवे 3 में मार्गों में आईडी के लिए एंकर का उपयोग कैसे करते हैं?

हालांकि, मैं यूआरएल posts/741#1220, या यहां तक ​​कि posts/741#comment-1230 बनाना चाहता हूं।

ऐसा करने का कम से कम घुसपैठ तरीका क्या है, ताकि redirect_to comment_path(my_comment) सही यूआरएल को इंगित करे?

उत्तर

57

आप बस

redirect_to post_path(comment.post, :anchor => "comment-#{comment.id}") 

मैन्युअल लंगर के साथ यूआरएल के निर्माण के लिए इस्तेमाल कर सकते हैं। इस तरह, आपके पास अभी भी आपकी टिप्पणियों में posts/:post_id/comments/:comment_id के रूप में आपकी टिप्पणियों का पूर्ण URL हो सकता है। आप उदाहरण में एक सहायक विधि भी बना सकते हैं application_controller.rb

class ApplicationController 
    helper :comment_link 

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

मेरा पूर्ण यूआरएल अभी भी पोस्ट होने का लाभ क्या होगा/पोस्ट_आईडी/टिप्पणियां/टिप्पणी_आईडी? – ClosureCowboy

+0

@ClosureCowboy: आप अभी भी संसाधनों के रूप में टिप्पणियों को सही ढंग से परिभाषित कर सकते हैं, उदाहरण के लिए उन्हें हटाएं या संपादित करें। यह आपकी वास्तविक आवश्यकताओं पर निर्भर करता है यदि यह समझ में आता है या नहीं। –

+0

नियंत्रक वास्तव में इस तरह के सहायक को रखने के लिए सबसे अच्छी जगह है? मैं खुद को इस मुद्दे पर विचार कर रहा हूं और मुझे नहीं पता कि मेरे सभी "एंकर लिंक हेल्पर्स" कहां रखना है –

-1

आप ऐसा करने के लिए टिप्पणी में toparam विधि को ओवरराइड कर सकते हैं।

उदाहरण

def to_param 
    comment.post_id.to_s + '#' + id.to_s 
end 

के लिए

और तुम routes.rb tweak करना होगा। अधिक जानकारी के लिए यह blog देखें।

0

अपने एंकर बिल्डर को एक ही स्थान पर रखना पसंद करते हैं।

class Comment 
    ... 
    def anchor 
    "comment-#{id}#{created_at.to_i}" 
    end 
end 

तो

post_path(comment.post, :anchor => comment.anchor) 

created_at.to_i जोड़ने से आपके डेटा में थोड़ा और अधिक धुंधला कर देता है और कुछ भी नुकसान नहीं पहुंचाता।

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