Rails TextHelper truncate方法:检查更复杂的分隔符?

时间:2012-10-12 22:40:28

标签: ruby-on-rails

有没有办法在这个中使用正则表达式来处理更复杂的分隔符?

truncate(content, :length=>60, :separator=>' ')

检查标准空间作为分隔符('')对我来说是不够的。我的主要目标是检查\ n(输入/换新行),如果有人知道该怎么做,请告诉我。

如果有办法检查更广泛的事情,我也很好奇。

修改 对不起,更多详情:我希望有一个像=>的分隔符/ \ r \ n / 因此,在确定省略号的位置时,truncate方法将在空格和新行周围分开,但我不能使用正则表达式。看到问题了?

2 个答案:

答案 0 :(得分:1)

Truncate仅允许两个可选参数:omission:separator。您可以通过以下代码查看截断,它仅设置为使用: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()代码进行相当简单的修改......

答案 1 :(得分:0)

这对我有用:

truncate(content, :length => 60, :separator => '\n')