2011-05-18 9 views
5

he estado tratando el método de cadena # truncado proporcionada por los carriles 3:comportamiento extraño de Truncar en Rails 3

irb(main):001:0> "abcde".truncate(1) 
=> "abc..." 
irb(main):002:0> "abcde".truncate(2) 
=> "abcd..." 
irb(main):003:0> "abcde".truncate(3) 
=> "..." 
irb(main):004:0> "abcde".truncate(4) 
=> "a..." 
irb(main):005:0> "abcde".truncate(5) 
=> "abcde" 
irb(main):006:0> "abcde".truncate(6) 
=> "abcde" 

estoy esperando algo así como "a...", "ab...", "abc..." ...

I no entiendo por qué está actuando así.

Estoy usando Ruby 1.8.7.

Respuesta

4

La longitud que proporcione a truncate debe incluir ..., por lo que las longitudes de 4 o mayores deben funcionar perfectamente.

Parece haber un error en el método String#truncate. En cuanto a la source code, no parece que haya algo allí para manejar longitudes suministrados inferior a 3.

Ejemplo:

Cuando proporciona 4 como la longitud, los carriles resta 3 para la ..., dejando su longitud ajustada como 1. De manera que los carriles que utiliza 1 como la parte final de una subcadena de "ABCDE":

"abcde"[0...1] + '...' 
# => "a..." 

Sin embargo, si se suministra 1 como la longitud, después de restar el 3 su longitud ajustada se convierte en -2. -2 enchufar en el rango que le da a este:

"abcde"[0...-2] + '...' 
# => "abc..." 
0

Puede hacer cumplir el comportamiento que se espera de pasar

:omission => '' 

para truncar.

+0

¿Funciona en 1.8.7? En 1.9.3 y Rails 3.2 su solución no proporciona la salida solicitada. –