Странное поведение усечения в Rails 3 - PullRequest
5 голосов
/ 18 мая 2011

Я пробовал метод String # truncate, предоставляемый 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"

Я ожидаю что-то вроде "a...", "ab...", "abc..." ...

Я не понимаю, почему это так.

Я использую Ruby 1.8.7.

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Длина, указанная вами для truncate, должна включать ..., поэтому длины 4 и более должны работать идеально.

Кажется, есть ошибка в методе String#truncate. Глядя на исходный код , не похоже, что там есть что-то для обработки поставляемых длин менее 3.

Пример:

Когда вы вводите 4 в качестве длины, рельсы вычитают 3 для ..., оставляя настроенную длину как 1. Итак, rails использует этот 1 как конечную часть подстроки «abcde»:

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

Однако, если вы введете 1 в качестве длины, после вычитания 3 ваша скорректированная длина станет -2. Включение -2 в диапазон дает вам следующее:

"abcde"[0...-2] + '...'
# => "abc..."
0 голосов
/ 17 мая 2012

Вы можете применить ожидаемое поведение, передавая

:omission => ''

для усечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...