method

truncate

truncate(text, length = 30, truncate_string = "...")
public

Truncates text to the length of length and replaces the last three characters with the truncate_string if the text is longer than length.

2Notes

Method description from Rails 2.0

railsmonk · Sep 23, 20083 thanks

If text is longer than length, text will be truncated to the length of length (defaults to 30) and the last characters will be replaced with the truncate_string (defaults to "…").

==== Examples

truncate("Once upon a time in a world far far away", 14)
# => Once upon a...

truncate("Once upon a time in a world far far away")
# => Once upon a time in a world f...

truncate("And they found that many people were sleeping better.", 25, "(clipped)")
# => And they found that many (clipped)

truncate("And they found that many people were sleeping better.", 15, "... (continued)")
# => And they found... (continued)

Incompatible with Ruby 1.8.7

insane-dreamer · Mar 12, 20092 thanks

If using Rails < 2.2 with Ruby 1.8.7, calling truncate will result in the following error:

undefined method `length' for #<Enumerable::Enumerator:0xb74f952c>

The workaround (other than upgrading to Rails 2.2 or higher), is to overwrite the truncate method, by inserting the following at the end of environment.rb (or where it will be called on startup):

module ActionView
module Helpers
  module TextHelper
    def truncate(text, length = 30, truncate_string = "...")
      if text.nil? then return end
      l = length - truncate_string.chars.to_a.size
      (text.chars.to_a.size > length ? text.chars.to_a[0...l].join + truncate_string : text).to_s
    end
  end
end
end