2010-04-13 41 views
29

我在Ruby on Rails中構建的一個非常簡單的博客應用程序的主頁上顯示最近的評論。我想限制從評論表的「正文」列顯示的字符數。我假設我可以在代碼的末尾添加一些代碼,但我不知道這會是什麼,因爲我對Ruby和Rails都是新手。在視圖中限制字符/單詞 - ruby​​ on rails

下面是代碼我在/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 -%> 

回答

68

嘗試truncate視圖助手

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

只是好奇(不一個Rails用戶):這也會起作用嗎? <%= h comment.body [0,80] +「...」%> – steenslag 2010-04-13 21:38:24

+0

這幾乎是truncate在底下做的事情,但它也會檢查長度以知道是否要在結束 – Corey 2010-04-13 23:15:58

+0

只是想補充說truncate不是多字節安全的(ruby 1.8,rails 2.3.5,不確定關於ruby 1.9)。它在指定的字節處截斷,如果你有一個unicode字符串,輸出將會變短(少於指定長度的字符)。最後,你最終也會遇到一個破碎的角色。當然,如果使用ASCII或任何其他8位字符編碼,沒有什麼可擔心的。 – Teoulas 2010-04-13 23:40:41

24

我剛剛找到另一種方式(如果你不希望添加的 「...」)

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

正如RoR API for String說:

第一(極限= 1)

返回第一個字符。如果提供了限制,則從字符串的開始處返回一個子字符串,直到達到限制值。如果給定的限制大於或等於字符串長度,則返回self。

comment = "1234567890" 

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

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

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

喜歡這個。謝謝。清理者,你不需要包含任何Rails視圖助手來使用它。 – 2015-06-29 20:53:04

+0

附加.html_safe如果html標記也包含在文本中 – ImranNaqvi 2016-10-29 21:37:13

5

如果您正在使用rails 4.2或以上,那麼你可以使用truncate_words方法。

例如:
「在當今世界,一切都是真棒」 .truncate_words(3)

輸出: 「在這個世界上......」