Rails中Truncate的奇怪行为3

时间:2011-05-18 16:44:34

标签: ruby string ruby-on-rails-3

我一直在尝试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。

2 个答案:

答案 0 :(得分:4)

您提供给truncate的长度应包含...,因此4或更长的长度应该可以正常工作。

String#truncate方法中似乎存在错误。看source code,看起来没有任何东西可以处理小于3的供应长度。

示例:

当您提供4作为长度时,rails会为3减去...,并将调整后的长度保留为1。因此,rails使用1作为“abcde”的子字符串的结尾部分:

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

但是,如果您提供1作为长度,则在减去调整后的3长度变为-2后。将-2插入范围会为您提供:

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

答案 1 :(得分:0)

您可以强制执行预期的行为传递

:omission => ''

截断。