>我一直在尝试Rails 3提供的String#truncate方法:
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。
您提供给truncate
的长度应包括...
,因此 4 或更大的长度应该可以完美工作。
String#truncate
方法中似乎存在错误。查看源代码,似乎没有任何内容可以处理提供的长度小于 3。
例:
当您提供4
作为长度时,导轨会减去...
的3
,将调整后的长度保留为1
。因此,rails 使用该1
作为"abcde"子字符串的结尾部分:
"abcde"[0...1] + '...'
# => "a..."
但是,如果您提供1
作为长度,则减去3
后,调整后的长度将变为-2
。将-2
插入该范围可得到以下信息:
"abcde"[0...-2] + '...'
# => "abc..."
您可以强制执行预期的行为传递
:omission => ''
以截断。