Truncateは、2 つのオプション引数のみを許可し:omission
ます:separator
。次の truncate のコードを見ると、 の文字列でのみ機能するように設定されていることがわかります:separator
。
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 38
def truncate(length, options = {})
text = self.dup
options[:omission] ||= "..."
length_with_room_for_omission = length - options[:omission].mb_chars.length
chars = text.mb_chars
stop = options[:separator] ? (chars.rindex(options[:separator].mb_chars, length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission
(chars.length > length ? chars[0...stop] + options[:omission] : text).to_s
end
これが言われているので、次のようなもので(状況を正しく理解している場合)達成しようとしていることを達成できるはずです(最初に改行などをスペースに切り替えます):
truncate(content.gsub(/\s/i, ' '), :length=>60, :separator=>' ')
truncate()
これが単純すぎる場合は、公式コードにかなり簡単な変更を加えることで、おそらくあなたが望むものを正確に思いつくことができます...