2016-01-02 4 views
0

У меня есть помощник, который я использую для усечения строк в Rails, и он отлично работает, когда я усекаю предложения, заканчивающиеся в периоды. Как мне изменить код, чтобы урезать предложения, когда они заканчиваются вопросительными знаками или восклицательными знаками?Усекать предложения в rails?

def smart_truncate(s, opts = {}) 
    opts = {:words => 12}.merge(opts) 
    if opts[:sentences] 
     return s.split(/\.(\s|$)+/).reject{ |s| s.strip.empty? }[0, opts[:sentences]].map{|s| s.strip}.join('. ') + '...' 
    end 
    a = s.split(/\s/) # or /[ ]+/ to only split on spaces 
    n = opts[:words] 
    a[0...n].join(' ') + (a.size > n ? '... (more)' : '') 
end 

Спасибо !!!

+1

Любая причина не использовать это: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-truncate –

+0

Рассматривали ли вы с помощью 'truncate', предусмотренных Rails ? –

+0

Я рассматривал использование усечения, но он не подходит моим потребностям. Я использую этот помощник, чтобы дать предварительный просмотр контента, не испортив его (слишком долго), и показывая целую фразу - это то, что я решил. –

ответ

0

У вас есть truncate method

'Once upon a time in a world far far away'.truncate(27, separator: /\s/, ommission: "....") 

который будет возвращать "Once upon a time in a..."


И если вам нужно усечь по количеству слов, а не затем использовать вновь вводимых truncate_words (с Rails 4.2.2)

'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)') 

который возвращает

"And they found that many... (continued)" 
Смежные вопросы