The length you provide truncateshould include ..., so lengths of 4 or more should work fine.
There seems to be a mistake in the method String#truncate. Looking at the source code , it doesn't look like anything there to handle the provided lengths less than 3.
Example:
4 3 ..., 1. , rails 1 "abcde":
"abcde"[0...1] + '...'
, 1 , 3 -2. -2 :
"abcde"[0...-2] + '...'