Rails: Abrir link em uma nova guia (com 'link_to')

139

Eu tenho este código:

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

Como faço para abrir em uma nova guia quando um usuário clica no link?

Dantes
fonte

Respostas:

269

O target: :_blank parâmetro deve ser um parâmetro de link_to, enquanto você o coloca em image_tagparâmetros. Modifique seu código assim:

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

Ou com um bloco:

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

Tente o seguinte:

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

Você também pode usar em target: :_blankvez detarget: '_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 %>
Deepak Mahakale
fonte
3

Se você deseja saber como abrir um link em uma nova guia no html (para qualquer um que veio do Google), aqui:

<a href="http://www.facebook.com/mypage" target="_blank">Link name</a>
funfuntime
fonte
8
Não vou te rebaixar, mas esta página é especificamente sobre o link do Ruby_to (do título).
Herb Meehan
1
@HerbMeehan Não tenho certeza se vou votar, mas é meio que útil para explicar o que isso target: :_blanksignifica.
Andrew Grimm
1

Meu entendimento é: você pode pedir ao navegador para abrir uma nova guia ou um novo site. Mas isso depende das configurações do usuário. Considero que esta pergunta foi respondida.

Exceto que caí em uma armadilha quando é necessário separar as opções de link das opções html:

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

Exemplo:

link_to('Click me', { action: 'show', controller: 'blog', id: 1 }, { target: '_blank' })
Manuel
fonte
obrigado pela sua resposta, me salvou 2 horas de depuração e teste
Carlos J García
1

Para adicionar à resposta anterior, o formato abaixo é o que está sendo sugerido pelo rubocop. Isso pode ser um risco à segurança, pois a página carregada terá controle sobre a página anterior e poderá mudar sua localização para fins de phishing.

Para evitar isso, é necessário adicionar o atributo 'rel' ao código.

rel: 'noopener'

Agora o link_to deve ser:

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

documentos rubocop

moody_drew
fonte