ruby on rails - rails - Truncar una cadena sin cortar en medio de una palabra en los rieles
truncate rails (3)
Al iniciar Rails 4.2
hay un nuevo método ActiveSupport
llamado string#truncate_words
. Trunca una cadena por el número de palabras, lo que hace que sea imposible tener un corte en medio de una palabra.
''And they found that many people were sleeping better.''.truncate_words(5, omission: ''... (continued)'')
que devuelve
"And they found that many... (continued)"
¿Cómo puedo truncar un texto a la posición más cercana con los rieles 3 sin cortar en medio de una palabra?
Por ejemplo, tengo la cadena:
"Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."
Si lo corto, quiero cortar así:
"Praesent commodo cursus magna, vel scelerisque nisl ..."
Y no :
"Praesent commodo cursus magna, vel scelerisque nisl conse..."
Si pasa un separador al método truncado, realizará un salto de palabra natural en lugar de truncar en la mitad de una palabra.
Algo como esto debería funcionar (varíe la longitud a lo que quiera eliminar por completo si desea el valor predeterminado de 30 caracteres):
truncate("Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.", :length => 17, :separator => '' '')
Puede encontrar más información sobre las opciones que puede tener en Truncate en la Documentation
Truncar es una excelente opción, pero si desea tener una completa detección de palabras , regex es su solución. Yo recomendaría algo como esto:
string.match(/^.{0,30}/b/)[0]
O puedes poner esto en una función
def shorten(string, count)
string.match(/^.{0,#{count}}/b/)[0]
end
Actualizar
De acuerdo con la documentación de Rails , puede pasar expresiones regulares al método de truncado, así:
''Once upon a time in a world far far away''.truncate(27, separator: //s/)
Ambas opciones ofrecen una detección de límites de palabras mucho mejor que pasar un carácter de espacio al método truncado.