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 %>  


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.