2011-02-17 16 views
10

मुझे काफी लंबा विवरण है कि मैं ट्रंकेट सहायक का उपयोग करके छोटा करना चाहता हूं। तो मैं उपयोग कर रहा हूँ:रेलों को छिपाने के लिए लिंक के साथ सहायक छेड़छाड़

truncate article.description, :length => 200, :omission => ' ...' 

समस्या यह है कि मैं इतना सिद्धांत रूप में मैं इस्तेमाल कर सकते हैं एक क्लिक करने योग्य लिंक के रूप में और अधिक उपयोग करना चाहते हैं इस:

truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}" 

चूक पाठ असुरक्षित के रूप में नियंत्रित किया जाता है तो यह बच निकला है मैंने इसे html_safe बनाने की कोशिश की लेकिन यह काम नहीं किया, लिंक के बजाय [अधिक] मेरा ब्राउज़र अभी भी उस लिंक के लिए HTML दिखा रहा है।

क्या मिटाने के पाठ के बजाय ओमिशन लिंक मुद्रित करने के लिए ट्रंकेट को मजबूर करने का कोई तरीका है?

+1

संभव डुप्लिकेट [रूबी को एक लिंक को छिड़काव करें] (http: // stackoverflow।कॉम/प्रश्न/4964073/मेक-ओमिशन-इन-रूबी-ट्रंकेट-ए-लिंक) –

उत्तर

10

मैं एक सहायक विधि में अपने दम पर यह कर सुझाव है, इस तरह आप उत्पादन पर एक छोटे से अधिक नियंत्रण के रूप में अच्छी तरह से करना होगा:

def article_description article 
    output = h truncate(article.description, length: 200, omission: '...') 
    output += link_to('[more]', article_path(article)) if article.description.size > 200 
    output.html_safe 
end 
+0

@ पाम-थॉमकोस यह एक समस्या के लिए बहुत अच्छा काम करता है। जब मैं लिंक पर क्लिक करता हूं तो यह पोस्ट/1 के बजाय पदों पर जाता है। –

+0

यह बहुवचन 'articles_path' – Patrick

+0

के बजाय एकवचन 'article_path' होना चाहिए, छंटनी से पहले' h' क्या करता है? – Patrick

7

गंदा समाधान ... "कच्चे विधि का उपयोग "इसे अनदेखा करने के लिए।
आपको अपनी सामग्री की "स्वच्छता" सुनिश्चित करना होगा।

raw(truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}") 

कच्चे एक सहायक है html_safe की तरह अभिनय।
अलविदा

संपादित करें: बचने की चूक नहीं है, लेकिन छंटनी विधि का परिणाम है।

+1

समस्या यह है कि मैं article.description –

4

मुझे एक समान स्थिति का सामना करना पड़ा और यह चाल थी। (लाइन पठनीयता के लिए टूट जाता है) का प्रयास करें:

(truncate h(article.description), 
        :length => 200, 
        :omission => "... #{link_to('[more]',articles_path(article)}") 
        .html_safe 

आप ज उपयोग कर सकते हैं लेख विवरण के विवेक सुनिश्चित करने के लिए है, और जब से तुम एक रास्ते पर LINK_TO सेट कर रहे हैं आप कुछ संभावित नापाक नहीं होने के लिए पता है, तुम जिसके परिणामस्वरूप चिह्नित कर सकते हैं चिंता के बिना html_safe के रूप में स्ट्रिंग।

truncate("<script>alert('hello world')</script>") { link_to "Read More", "#" } 

#=> &lt;script&gt;alert(&#39;hello world&#39;...<a href="#">Read More</a> 
+0

की संवेदना के बारे में सुनिश्चित नहीं हो सकता, आपको कम से कम रेल से 4.0.1 के रूप में 'बचाना: झूठा' में गुजरने के लिए सावधान रहना होगा, क्योंकि ['TextHelper # truncate' अपने स्वयं के भागने को जोड़ें] (https://github.com/rails/rails/blob/58ab79ff9b34c22c3477e29763fdd4f4612e938d/actionpack/lib/action_view/helpers/text_helper.rb#L92) 'h (article.description) 'के संयोजन के लिए और 'चूक' पाठ। '.html_safe' की कोई मात्रा इसे रोक नहीं पाएगी। –

2

TextHelper#truncate जो आपको एक link_to कि बच गए नहीं किया गया है, जबकि अभी भी छोटा कर दिया पाठ से बचने की सुविधा देता है एक block form of truncate है, रेल 4 के साथ, आप लिंक के लिए ब्लॉक में पास/पास कर सकते हैं:

truncate("Once upon a time in a world far far away", 
    length: 10, 
    separator: ' ', 
    omission: '... ') {  
    link_to "Read more", "#" 
} 
1

केवल एक ही है कि मेरे लिए काम किया:

<%= truncate(@article.content, length: 200, omission: " ... %s") % link_to('read more', article_path(@article)) %> 
10

+0

काम करता है। धन्यवाद .. – Abram

+0

यह मेरे लिए क्या किया गया है। धन्यवाद! – iamse7en

1

मुझे एक ही समस्या थी, मेरे मामले में मैंने अभी :escape => false का उपयोग किया था। यही काम किया:

truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}", :escape => false

प्रलेखन से:

परिणाम एचटीएमएल-सुरक्षित के रूप में चिह्नित है, लेकिन यह डिफ़ॉल्ट रूप से बच रहा है, जब तक: बच गलत है .... लिंक: http://apidock.com/rails/ActionView/Helpers/TextHelper/truncate

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