13
<%= message.content %>

I can display a message like this, but in some situations I would like to display only the first 5 words of the string and then show an ellipsis (...)

user664833
  • 18,397
  • 19
  • 91
  • 140
user852974
  • 2,242
  • 10
  • 41
  • 65

4 Answers4

26

In rails 4.2 you can use truncate_words.

'Once upon a time in a world far far away'.truncate_words(4)
=> "Once upon a time..."
user664833
  • 18,397
  • 19
  • 91
  • 140
Radhika
  • 2,453
  • 2
  • 23
  • 28
16

you can use truncate to limit length of string

truncate("Once upon a time in a world far far away", :length => 17, :separator => ' ')
# => "Once upon a..."

with given space separator it won't cut your words.

If you want exactly 5 words you can do something like this

class String
  def words_limit(limit)
    string_arr = self.split(' ')
    string_arr.count > limit ? "#{string_arr[0..(limit-1)].join(' ')}..." : self
  end
end
text = "aa bb cc dd ee ff"
p text.words_limit(3)
# => aa bb cc...
gilsilas
  • 1,441
  • 2
  • 15
  • 24
11

Try the following:

'this is a line of some words'.split[0..3].join(' ')
=> "this is a line" 
user664833
  • 18,397
  • 19
  • 91
  • 140
ndrix
  • 1,191
  • 12
  • 18
2
   # Message helper
   def content_excerpt(c)
     return unlessc
     c.split(" ")[0..4].join + "..."
   end

   # View
   <%= message.content_excerpt %>

But the common way is truncate method

   # Message helper
   def content_excerpt(c)
     return unless c
     truncate(c, :length => 20)
   end
Anatoly
  • 15,298
  • 5
  • 53
  • 77