Rails: открыть ссылку в новой вкладке (с 'link_to')

143

У меня есть такой код:

<%= link_to image_tag("facebook.png", :class => "facebook_icon", :alt => "Facebook", :target => "_blank"),                 
            "http://www.facebook.com/mypage" %>

Как сделать так, чтобы она открывалась в новой вкладке, когда пользователь нажимает на ссылку?

Дантес
источник

Ответы:

282

target: :_blank Параметр должен быть параметром link_to, в то время как вы поместите его в image_tagпараметрах. Измените свой код следующим образом:

<%= link_to image_tag("facebook.png", class: :facebook_icon, alt: "Facebook"), "http://www.facebook.com/mypage", target: :_blank %>

Или с блоком:

<%= link_to "http://www.facebook.com/mypage", target: :_blank do %>
  <%= image_tag("facebook.png", class: :facebook_icon, alt: "Facebook") %>     
<% end %>  
Болдрик
источник
14

Попробуй это:

<%= link_to image_tag("facebook.png", :class => "facebook_icon", :alt => "Facebook"), "http://www.facebook.com/mypage", :target => "_blank" %>
Александр Хиральдо
источник
8

Вы также можете использовать target: :_blankвместоtarget: '_blank'

<%= link_to image_tag("facebook.png", class: "facebook_icon", alt: "Facebook"), "http://www.facebook.com/mypage", target: :_blank %>

link_to do

<%= link_to "http://www.facebook.com/mypage", target: :_blank do %>
  <%= image_tag "facebook.png", class: "facebook_icon", alt: "Facebook" %>
<% end %>
Дипак Махакале
источник
2

Если вы ищете, как открыть ссылку на новой вкладке в html (для всех, кто пришел сюда из Google), вот:

<a href="http://www.facebook.com/mypage" target="_blank">Link name</a>
веселье
источник
10
Я не собираюсь опускать вас, но эта страница специально посвящена Ruby link_to (из заголовка).
Херб Михан,
1
@HerbMeehan Я не уверен, стоит ли голосовать за, но это полезно для объяснения того, что target: :_blankозначает.
Эндрю Гримм
2

Я так понимаю: вы можете попросить браузер открыть новую вкладку или новый сайт. Но это зависит от настроек пользователя. Считаю ответ на этот вопрос.

За исключением того, что я попал в ловушку, когда необходимо отделить параметры ссылки от параметров html:

link_to(name = nil, options = nil, html_options = nil, &block)

Пример:

link_to('Click me', { action: 'show', controller: 'blog', id: 1 }, { target: '_blank' })
Мануэль
источник
спасибо за ваш ответ, сэкономил мне 2 часа отладки и тестирования
Карлос Дж. Гарсия
1

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

Чтобы этого не произошло, нужно добавить в код атрибут rel.

rel: 'noopener'

Теперь link_to должен быть:

<%= link_to image_tag("facebook.png", class: :facebook_icon, alt: "Facebook"), "http://www.facebook.com/mypage", target: :_blank, rel: 'noopener %>

rubocop docs

ogAndrew
источник