Truncate - отличный вариант, но если вы хотите, чтобы полное определение слова , regex - ваше решение.Я бы порекомендовал что-то вроде этого:
string.match(/^.{0,30}\b/)[0]
Или вы можете поместить это в функцию
def shorten(string, count)
string.match(/^.{0,#{count}}\b/)[0]
end
Обновление
Согласно Документация по Rails Вы можете передать регулярное выражение в метод усечения, например, так:
'Once upon a time in a world far far away'.truncate(27, separator: /\s/)
Обе эти опции предлагают намного лучшее обнаружение границы слова, чем передача символа пробела в метод усечения.