Комментарии помощник URL - с помощью рельсов - LinkBot?
К... Это кажется довольно прямым, но это не стандартизировано, казалось бы. Я искал всего несколько часов, но, надеюсь, кто-то здесь может указать мне правильное направление.
Итак, экземпляр Object
есть описание. Object has_many comments
, Если пользователь публикует URL-адрес в одном из этих полей, например, http://www.foodnetwork.com/recipes/ree-drummond/tequila-lime-chicken-recipe/index.html. Когда я набираю это, я вижу что-то ниже, что-то знал, чтобы преобразовать это в кликабельную ссылку. Я хотел бы сделать этот шаг дальше. Я хотел бы видеть, что та же самая ссылка превращается в основной URL, но все же фактическая ссылка, а-ля foodnetwork.
Могут ли рельсы сделать что-то подобное на лету? Есть ли драгоценный камень для чего-то подобного? Должен ли я сделать вышеупомянутый гем link_bot?
После нескольких указаний в правильном направлении, я пошел вспомогательным методом, так как игра в модели не работала. Посмотреть:
<% if object.comments.any? %>
<% object.comments.each do |comment| %>
<div class='comment block'>
<div class='comment user'>
<%= first_name(comment.user) %>
<span class='comment time'><%= time_ago_in_words(comment.created_at) %> ago</span>
</div>
<div class='comment content'>
<%= parse_links(comment.content) %>
</div>
</div>
<% end %>
<% end %>
В помощник:
def parse_links(comment)
auto_link(comment, html: {target: '_blank'}) do |text|
URI.parse(text).host
end
end
Ура!
1 ответ
Вы должны попробовать гем auto_link.
Они приводят пример игры с текстом ссылки:
post_body = "Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com."
auto_link(post_body, :html => { :target => '_blank' }) do |text|
truncate(text, 15)
end
# => "Welcome to my new blog at <a href=\"http://www.myblog.com/\" target=\"_blank\">http://www.m...</a>.
Обновить
Попробуй это:
<%= auto_link(comment.content, html: {target: '_blank'}) do |text| %>
# if URI.parse(text).host doesn't work try a regex:
<%= text.match(/http:\/\/([^\/]*).*/)[1] %> # is there a better way to do this regex?
# also try just <% instead of <%= if you get weird outputs.
<% end %>
Если вы получили какие-либо ошибки, добавьте их в свой вопрос.