Ruby on Rails - усекать до определенной строки - PullRequest
4 голосов
/ 16 февраля 2011

Уточнение: Создатель поста должен иметь возможность решить, когда должно произойти усечение.

Я реализовал в своем блоге функцию, подобную Wordpress [--- MORE ---], с помощью следующей вспомогательной функции:

# application_helper.rb

def more_split(content)
split = content.split("[---MORE---]")
split.first
end

def remove_more_tag(content)
content.sub(“[---MORE---]", '')
end

В индексном представлении тело сообщения будет отображать все до (но без) тега [--- MORE ---].

# index.html.erb
<%= raw more_split(post.rendered_body) %>

И в представлении показа будет отображаться все из тела сообщения, кроме тега [--- MORE ---].

# show.html.erb
<%=raw remove_more_tag(@post.rendered_body) %>

Это решение в настоящее время работает для меня без каких-либо проблем. Поскольку я все еще новичок в программировании, мне постоянно интересно, есть ли более элегантный способ сделать это .

Как бы вы это сделали?

Спасибо за ваше время.


Это обновленная версия:

# index.html.erb
<%=raw truncate(post.rendered_body,  
                :length => 0, 
                :separator => '[---MORE---]', 
                :omission => link_to( "Continued...",post)) %>

... и в режиме просмотра:

# show.html.erb
<%=raw (@post.rendered_body).gsub("[---MORE---]", '') %>

Ответы [ 4 ]

8 голосов
/ 16 февраля 2011

Я бы использовал просто усечение, в нем есть все необходимые параметры.

truncate("And they found that many people were sleeping better.", :length => 25, :omission => '... (continued)')
# => "And they f... (continued)"

Обновление

После просмотра комментариев и копания немногоВ документации кажется, что :separator выполняет свою работу.

Из документа:

Pass a :separator to truncate text at a natural break.

Для ознакомления см. Документы

truncate(post.rendered_body, :separator => '[---MORE---]')

На странице шоу вы должны использовать gsub

0 голосов
/ 18 апреля 2013

Мне нужен один, который я могу использовать в этом шаблоне вызова ERB. Это простая строка:

<%= @page_info.user_name %>

Я пытался <%= truncate(@page_info.user_name, :length => -2)

Но на самом деле длинное имя пользователя повторяется дважды или по-разному в зависимости от числа Я просто хочу разрешить показывать 10 символов имени пользователя.

0 голосов
/ 05 января 2012

Я попробовал и нашел этот самый лучший и простой

def summarize(body, length)
    return simple_format = body[0..length]+'...'
end

s = summarize("to get the first n characters in your post. So, then you don't have to deal w/ splitting on the [---MORE---]  post.body.",20)


ruby-1.9.2-p290 :017 > s
=> "to get the first n ..." 
0 голосов
/ 16 февраля 2011

Вы можете использовать вспомогательную функцию на странице индекса, которая захватывает только первые X символов в вашей строке.Таким образом, это будет выглядеть примерно так:

<%= raw summarize(post.rendered_body, 250) %>

, чтобы получить первые 250 символов в вашем посте.Таким образом, вам не нужно разбирать строку [--- MORE ---].И, на странице показа для вашего поста вам вообще ничего не нужно будет делать ... просто отобразите post.body.


Вот пример вспомогательного суммирования (который вы бы вставили вapplication_helper.rb):

def summarize(body, length)
return simple_format(truncate(body.gsub(/<\/?.*?>/,  ""), :length => length)).gsub(/<\/?.*?>/,  "")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...