2010-04-13 34 views
29

Tôi hiển thị các nhận xét gần đây trên trang chủ của một ứng dụng blog rất đơn giản mà tôi đang xây dựng trong Ruby on Rails. Tôi muốn giới hạn số ký tự được hiển thị từ cột 'nội dung' của bảng nhận xét. Tôi giả sử tôi chỉ có thể thêm một cái gì đó vào cuối mã cho <% = h comment.body%> nhưng tôi không biết điều gì sẽ được nêu ra như tôi mới cho cả Ruby và Rails.Giới hạn các ký tự/từ trong chế độ xem - ruby ​​on rails

Đây là mã tôi có trong tập tin /views/posts/index.html.erb:

<% 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 -%> 

Trả lời

68

Thử helper truncate xem

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

Chỉ cần tò mò (không một người dùng Rails): điều này cũng sẽ hoạt động? <% = h comment.body [0, 80] + "..."%> – steenslag

+0

Đó là khá nhiều những gì cắt ngắn bên dưới, nhưng nó cũng kiểm tra độ dài để biết nếu thêm '...' tại end – Corey

+0

Chỉ muốn thêm rằng truncate không phải là an toàn đa byte (ruby 1.8, đường ray 2.3.5, không chắc chắn về ruby ​​1.9). Nó cắt ngắn tại byte được chỉ định và nếu bạn có một chuỗi unicode đầu ra sẽ ngắn hơn (ít ký tự hơn độ dài được chỉ định). Bạn cũng có thể kết thúc với một nhân vật bị hỏng ở cuối. Tất nhiên, không có gì phải lo lắng nếu bạn sử dụng ASCII hoặc bất kỳ mã hóa ký tự 8 bit nào khác. – Teoulas

24

tôi chỉ tìm thấy một cách khác (nếu bạn không muốn thêm "...")

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

Như đã nói trong RoR API for String:

đầu tiên (giới hạn = 1)

Trả về ký tự đầu tiên. Nếu một giới hạn được cung cấp, trả về một chuỗi con từ đầu chuỗi cho đến khi nó đạt đến giá trị giới hạn. Nếu giới hạn đã cho lớn hơn hoặc bằng độ dài chuỗi, trả về tự.

comment = "1234567890" 

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

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

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

Yêu thích điều này. Cảm ơn. Cleaner và bạn không cần phải bao gồm bất kỳ trình trợ giúp xem Rails nào để sử dụng nó. –

+0

đính kèm .html_safe nếu thẻ html cũng được bao gồm trong văn bản – ImranNaqvi

5

Nếu bạn đang sử dụng rails 4.2 hoặc cao hơn thì bạn có thể sử dụng phương pháp truncate_words.

Ví dụ:
"Trong một thế giới mà mọi thứ đều tuyệt vời" .truncate_words (3)

Output: "Trong một thế giới ..."