Rails: Ouvrir le lien dans un nouvel onglet (avec 'link_to')

139

J'ai ce code:

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

Comment puis-je le faire ouvrir dans un nouvel onglet lorsqu'un utilisateur clique sur le lien?

Dantès
la source

Réponses:

269

Le target: :_blank paramètre doit être un paramètre de link_to, alors que vous le mettez dans image_tagparamètres. Modifiez votre code comme ceci:

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

Ou avec un bloc:

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

Essaye ça:

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

Vous pouvez également utiliser à la target: :_blankplace 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
la source
3

Si vous cherchez comment ouvrir un lien dans un nouvel onglet dans html (pour quiconque est venu ici de Google), ici:

<a href="http://www.facebook.com/mypage" target="_blank">Link name</a>
funfuntime
la source
8
Je ne vais pas vous rejeter, mais cette page concerne spécifiquement le lien vers Ruby (à partir du titre).
Herb Meehan
1
@HerbMeehan Je ne sais pas si je dois voter pour, mais c'est assez utile pour expliquer ce que cela target: :_blanksignifie.
Andrew Grimm
1

Ma compréhension est la suivante: vous pouvez demander au navigateur d'ouvrir un nouvel onglet ou un nouveau site. Mais cela dépend des paramètres utilisateur. Je considère que cette question a répondu.

Sauf que je suis tombé dans un piège lorsqu'il est nécessaire de séparer les options de lien des options html:

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

Exemple:

link_to('Click me', { action: 'show', controller: 'blog', id: 1 }, { target: '_blank' })
Manuel
la source
merci pour votre réponse, m'a sauvé 2 heures de débogage et de test
Carlos J García
1

Pour compléter la réponse précédente, le format ci-dessous est celui proposé par rubocop. Cela peut être un risque pour la sécurité car la page chargée aura le contrôle sur la page précédente et pourrait changer son emplacement à des fins de phishing.

Pour éviter cela, il faut ajouter l'attribut «rel» au code.

rel: 'noopener'

Maintenant, le link_to devrait être:

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

docs rubocop

moody_drew
la source