2010-01-19 8 views
16

यह documentation (और google) से स्पष्ट है कि सेगमेंट के साथ एक लिंक कैसे उत्पन्न करें। podcast/5#comments। आप बस :anchor से link_to पर एक मान पास करते हैं।रेल में एंकर टैग को परिभाषित करने का सही तरीका क्या है?

मेरी चिंता <a name="comments">Comments</a> टैग यानी पहले लिंक के गंतव्य को उत्पन्न करने के बहुत आसान कार्य के बारे में है।

मैं निम्नलिखित की कोशिश की है, और हालांकि वे काम करने के लिए लग रहा था, मार्कअप मैं क्या नहीं की उम्मीद थी:

link_to "Comments", :name => "comments" 
link_to "Comments", :anchor => "comments" 

मुझे लगता है कि मैं कुछ स्पष्ट याद कर रहा हूँ। धन्यवाद।

+0

समझ नहीं है कि तुम क्या * स्पष्ट रूप से * लिखा था के लिए खेद के लिए! मेरी गलती! खुशी है कि आपको जवाब मिल गया है। मैंने अपना हटा दिया ताकि किसी को भी भ्रमित न किया जा सके :) –

उत्तर

52

आप रूबी के वाक्यात्मक चीनी से उलझन में हो रहे हैं (जो रेल दरियादिली से उपयोग करता है)। अपने प्रश्न का उत्तर देने से पहले मुझे संक्षेप में समझाएं।

एक गहरे लाल रंग का समारोह एक एकल पैरामीटर एक हैश है कि लेता है जब:

def foo(options) 
    #options is a hash with parameters inside 
end 

आप कोष्ठक/कोष्ठक डाल करने के लिए 'भूल' कर सकते हैं और इसे इस तरह कहते हैं:

foo :param => value, :param2 => value 

रूबी रिक्त स्थान भरेंगे और समझेंगे कि आप जो करने की कोशिश कर रहे हैं वह यह है:

foo({:param => value, :param2 => value}) 

अब, आपके प्रश्न पर: link_toदो वैकल्पिक हैश - एक को options और अन्य html_options कहा जाता है। आप कल्पना कर सकते हैं यह इस तरह परिभाषित किया गया है (यह एक सन्निकटन है, यह बहुत अधिक जटिल है)

def link_to(name, options, html_options) 
... 
end 

अब अगर आप इसे इस तरह आह्वान:

link_to 'Comments', :name => 'Comments' 

रूबी थोड़ा भ्रमित मिल जाएगा। यह आप के लिए "रिक्त स्थानों को भरने के" करने की कोशिश करेंगे, लेकिन गलत तरीके से:

link_to('Comments', {:name => 'Comments'}, {}) # incorrect 

ऐसा नहीं है कि name => 'Comments' हिस्सा विकल्प के अंतर्गत आता है सोचेंगे, html_options के लिए नहीं!

आपको रिक्त स्थान भरकर रूबी की मदद करनी है। स्थान में सभी कोष्ठक रखो और यह अपेक्षा के अनुरूप व्यवहार करेंगे:

link_to('Comments', {}, {:name => 'Comments'}) # correct 

आप वास्तव में कोष्ठक के अंतिम सेट निकाल सकते हैं अगर आप चाहते हैं:

link_to("Comments", {}, :name => "comments") # also correct 

आदेश html_options का उपयोग करने के लिए आपको छोड़ देना चाहिए हालांकि, ब्रैकेट का पहला सेट।उदाहरण के लिए, आप पुष्टि संदेश और नाम के साथ एक कड़ी के लिए यह करने के लिए की आवश्यकता होगी:

link_to("Comments", {:confirm => 'Sure?'}, :name => "comments") 

अन्य रेल सहायकों एक समान निर्माण (अर्थात form_for, collection_select) है, तो आप इस तकनीक सीखना चाहिए। संदेह में, बस सभी कोष्ठक जोड़ें।

+0

यह वही है जो मैं ढूंढ रहा था। धन्यवाद! समाधान देने के लिए –

+9

+1, लेकिन इसे समझाने के लिए! – Guillaume

14

यदि आप रेल के माध्यम से जाना चाहते हैं, तो मैं content_tag (docs) का सुझाव देता हूं।

उदाहरण:

content_tag(:a, 'Comments', :name => 'comments') 
+1

धन्यवाद, मुझे लगता है कि मैं यही देख रहा था। यह अब मेरे लिए होता है कि हैमल में, यह लिंक बनाने के लिए केवल '% a {: name =>" टिप्पणियां "} टिप्पणियां 'ले जाएगा। मुझे लगता है कि मुझे उम्मीद है कि रेल में हार्ड कोडिंग लिंक न हों। –

+0

कभी-कभी यह सिर्फ एक टैग फेंकने के लिए अच्छा है, लेकिन यदि आप erb'ing कर रहे हैं और रूबी से बाहर नहीं निकलना चाहते हैं, तो यह भी अच्छा है :) – theIV

+0

मुझे अभी भी यह जवाब पसंद है, लेकिन ईगारिया जो मैं देख रहा था के लिये। –

0
<%= link_to('new button', action: 'login' , class: "text-center") %> 

login.html i.g

<a href="login.html" class = "text-center"> new button </a> 

के लिए एक लंगर टैग बनाया और

<a href="admin/login.html" class = "text-center"> new button </a> 

उपयोग

<%= link_to('new button', controller: 'admin', 
    action: 'login' , class: "text-center") %> 
संबंधित मुद्दे