轨道中截断的奇怪行为 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。

您提供给truncate的长度应包括...,因此 4 或更大的长度应该可以完美工作。

String#truncate方法中似乎存在错误。查看源代码,似乎没有任何内容可以处理提供的长度小于 3。

例:

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

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

但是,如果您提供1作为长度,则减去3后,调整后的长度将变为-2。将-2插入该范围可得到以下信息:

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

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

:omission => ''

以截断。

相关内容

  • 没有找到相关文章

最新更新