2010-04-13 14 views
29

मैं रूबी ऑन रेल में एक बहुत ही साधारण ब्लॉग एप्लिकेशन के होम पेज पर हालिया टिप्पणियां प्रदर्शित कर रहा हूं। मैं टिप्पणी तालिका के 'बॉडी' कॉलम से प्रदर्शित वर्णों की संख्या को सीमित करना चाहता हूं। मुझे लगता है कि मैं <% = h comment.body%> के लिए कोड के अंत में कुछ जोड़ सकता हूं लेकिन मुझे नहीं पता कि यह अभी तक क्या होगा क्योंकि मैं रुबी और रेल दोनों के लिए नया हूं।अक्षरों/शब्दों को सीमित करने के लिए - रेल पर रूबी

<% Comment.find(:all, :order => 'created_at DESC', :limit => 5).each do |comment| -%> 
    <p> 
     <%=h comment.name %> commented on 
     <%= link_to h(comment.post.title), comment.post %><br/> 
     <%=h comment.body %> 
     <i> <%= time_ago_in_words(comment.created_at) %> ago</i> 
    </p> 
    <% end -%> 

उत्तर

68

truncate दृश्य सहायक प्रयास करें

<%=h truncate(comment.body, :length => 80) %> 
+0

बस उत्सुक (नहीं एक रेल उपयोगकर्ता): क्या यह भी काम करेगा? <% = h comment.body [0, 80] + "..."%> – steenslag

+0

यह बहुत कम है कि नीचे क्या छोटा है, लेकिन यह जानने के लिए लंबाई भी जांचता है कि '...' को जोड़ना है या नहीं अंत – Corey

+0

बस उस ट्रंकेट को जोड़ना चाहता था मल्टी-बाइट सुरक्षित नहीं है (रूबी 1.8, रेल 2.3.5, रूबी 1.9 के बारे में निश्चित नहीं है)। यह निर्दिष्ट बाइट पर छंटनी करता है और यदि आपके पास यूनिकोड स्ट्रिंग है तो आउटपुट कम होगा (निर्दिष्ट लंबाई से कम अक्षर)। आप अंत में एक टूटे हुए चरित्र के साथ भी समाप्त हो सकते हैं। बेशक, इस बारे में चिंता करने की कोई बात नहीं है कि आप ASCII या किसी अन्य 8-बिट वर्ण एन्कोडिंग का उपयोग करते हैं। – Teoulas

24

मैं सिर्फ एक और रास्ता मिल गया (यदि:

यहाँ कोड मैं /views/posts/index.html.erb फ़ाइल में है आप जोड़ने के लिए "...")

<%= comment.body.first(80) %> 

रूप RoR API for String में कहा नहीं करना चाहती:

पहले (सीमा = 1)

पहला वर्ण देता है। यदि कोई सीमा प्रदान की जाती है, तब तक स्ट्रिंग की शुरुआत से एक सबस्ट्रिंग लौटाती है जब तक वह सीमा मान तक पहुंच न जाए। यदि दी गई सीमा स्ट्रिंग लम्बाई से अधिक या बराबर है, तो स्वयं लौटाती है।

comment = "1234567890" 

comment.first(5) 
# => "12345" 

comment.first(10) 
# => "1234567890" 

comment.first(15) 
# => "1234567890" 
+0

इसे प्यार करो। धन्यवाद। क्लीनर और आपको इसका उपयोग करने के लिए किसी भी रेल व्यू हेल्पर्स को शामिल करने की आवश्यकता नहीं है। –

+0

संलग्न करें .html_safe अगर HTML टैग भी टेक्स्ट में शामिल हैं – ImranNaqvi

5

आप rails 4.2 या इसके बाद के संस्करण का उपयोग कर रहे हैं तो आप truncate_words विधि का उपयोग कर सकते हैं।

उदाहरण के लिए:
.truncate_words (3)

आउटपुट "ऐसी दुनिया में जहां सब कुछ भयानक है": "एक ऐसी दुनिया में ..."

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