метод truncate усечение произвольной (?) длины - PullRequest
0 голосов
/ 01 августа 2020

Я использую truncate со ссылкой «подробнее» в проекте Rails. Но, как ни странно, он обрезает контент, казалось бы, в случайных местах. Вот код на мой взгляд:

<%= truncate(simple_format(article.content), length: 500, separator: ".", escape: false, omission: "... #{link_to("Read More", article}") %>

Я измерил длину, где он усекается, и он очень случайный (например, 278, 360, и т. Д. c.). Разделение должно произойти в конце фразы (с separator: "."), и я проверяю, может ли это быть связано с этим, но нет. Несмотря на то, что в пределах 500 символов есть другие фразы, он разделяется намного раньше.

Удаление аргумента omission фактически решило проблему. Мне интересно, почему это происходит.

1 Ответ

2 голосов
/ 01 августа 2020

Экранированные символы HTML фактически учитываются в длине. Сюда входит ссылка и заголовок вашей статьи.

По умолчанию в Rails ссылка на вашу статью будет иметь вид /articles/1. Но если вы используете такой гем, как friendly_id, который создает короткие URL-адреса, такие как /some-slugged-article-title, каждая ссылка на статью будет иметь разную длину. Это то, что создает такое изменение длины усечения.

Чтобы разделить примерно 500 символов видимого текста, вам нужно добавить длину заголовка вашей статьи в аргумент длины. Вы можете сделать это так:

<%= truncate(simple_format(article.content), length: 500 + article.title.length, separator: ".", escape: false, omission: "... #{link_to("Read More", article)}") %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...