В моем приложении Rails 4 у меня есть модель Post
с :copy
и :short_copy
в качестве пользовательских атрибутов (строк).
Эти атрибуты содержат копии для социальных сетей (Facebook, Twitter, Instagram, Pinterest и т. д.).
Я отображаю содержимое этих атрибутов в своем представлении Posts#Show
.
В настоящее время URL-адреса, #хэштеги и @упоминания форматируются так же, как и остальной текст.
Что я хотел бы сделать, так это отформатировать их по-другому, например, другим цветом или жирным шрифтом.
Я нашел жемчуг twitter-text, который, кажется, предлагает такие функции , но моя проблема в том, что мне НЕ нужно и я НЕ хочу, чтобы эти URL-адреса, #хэштеги и @упоминания превращались в настоящие ссылки.
Действительно, похоже, что гем twitter-text по умолчанию преобразует URL-адреса, #хэштеги и @mentions с помощью Twitter::Autolink
, как описано в этот вопрос Stack Overflow.
Это не то, что я ищу: я просто хочу обновить стиль своих URL-адресов, #хэштегов и @упоминаний.
Как я могу сделать это в Ruby/Rails?
—————
ОБНОВЛЕНИЕ:
Следуя ответу Уэса Фостера, я реализовал следующий метод в post.rb
:
def highlight(string)
string.gsub!(/\S*#(\[[^\]]+\]|\S+)/, '<span class="highlight">\1</span>')
end
Затем я определил следующий класс CSS:
.highlight {
color: #337ab7;
}
Наконец, я реализовал <%= highlight(post.copy) %>
в нужном виде.
Теперь я получаю следующую ошибку:
ArgumentError
wrong number of arguments (1 for 2..3)
<td><%= highlight(post.copy) %></td>
Что я делаю неправильно?
—————
def highlight(string) string..gsub!(/(https?:\/\/[\S]+)/, '<span class="highlight">\1</span>') end
Любая идея, как я могу заставить это работать? 20.10.2015string..gsub
20.10.2015'
и"
, которые я использую. Вам не кажется? 20.10.2015new_highlight
как в модели, так и в представлении, и я получилNoMethodError undefined method
new_highlight'`. 21.10.2015new_highlight
в помощник представления, а не в свою модель. Или, если вы собираетесь внедрить его в свою модель, вам нужно будет ссылаться на него из экземпляра этой модели. Например:post.new_highlight
21.10.2015def new_highlight self.copy.gsub!(/\S*#(\[[^\]]+\]|\S+)/, '<span class="highlight">\1</span>') end
, а затем обновил представление с помощью «post.new_highlight». Это не вызывает никакой ошибки, но нет, у меня<span class="highlight">Test</span>
, т.е. теги<span>
отображаются как текст, а не внедряются в HTML. 21.10.2015raw
, чтобы гарантировать, что HTML не экранируется, и все будет готово. 21.10.2015posts_helper
илиcalendars_helper
? 21.10.2015posts_helper
21.10.2015