我一直在尝试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。
答案 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 => ''
截断。