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?

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

14

Tente o seguinte:

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

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

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>

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' })

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.