Отображение только первых x слов строки в рельсах - PullRequest
13 голосов
/ 13 августа 2011
<%= message.content %>

Я могу отобразить подобное сообщение, но в некоторых ситуациях Я хотел бы отобразить только первые 5 слов строки и затем показать многоточие (...)

Ответы [ 4 ]

21 голосов
/ 15 января 2015

В рельсах 4.2 вы можете использовать truncate_words .

'Once upon a time in a world far far away'.truncate_words(4)
=> "Once upon a time..."
16 голосов
/ 13 августа 2011

вы можете использовать усечение, чтобы ограничить длину строки

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

с указанным разделителем пробела, это не обрежет ваши слова.

Если вы хотите ровно 5 слов, вы можете сделать что-то вродеэто

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...
11 голосов
/ 10 мая 2012

Попробуйте следующее:

'this is a line of some words'.split[0..3].join(' ')
=> "this is a line" 
2 голосов
/ 13 августа 2011
   # Message helper
   def content_excerpt(c)
     return unlessc
     c.split(" ")[0..4].join + "..."
   end

   # View
   <%= message.content_excerpt %>

Но обычно используется усечение метод

   # Message helper
   def content_excerpt(c)
     return unless c
     truncate(c, :length => 20)
   end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...