Rails: Otwórz link w nowej karcie (z „link_to”)

139

Mam ten kod:

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

Jak mogę otworzyć go w nowej karcie, gdy użytkownik kliknie łącze?

Dantes
źródło

Odpowiedzi:

269

target: :_blank Parametr powinien być parametrem link_to, podczas gdy można umieścić go w image_tagparametrach. Zmodyfikuj swój kod w ten sposób:

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

Lub z blokiem:

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

Spróbuj tego:

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

Możesz także użyć target: :_blankzamiasttarget: '_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
źródło
3

Jeśli szukasz sposobu, aby otworzyć link w nowej karcie w html (dla każdego, kto przyszedł tu z Google), tutaj:

<a href="http://www.facebook.com/mypage" target="_blank">Link name</a>
funfuntime
źródło
8
Nie zamierzam cię przegłosować, ale ta strona dotyczy konkretnie linku do Rubiego (z tytułu).
Herb Meehan
1
@HerbMeehan Nie jestem pewien, czy głosować za, ale jest to przydatne w wyjaśnianiu, co to target: :_blankoznacza.
Andrew Grimm
1

Rozumiem: możesz poprosić przeglądarkę o otwarcie nowej karty lub nowej witryny. Ale to zależy od ustawień użytkownika. Uważam, że odpowiedź na to pytanie.

Z wyjątkiem tego, że wpadłem w pułapkę, kiedy konieczne jest oddzielenie opcji linków od opcji html:

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

Przykład:

link_to('Click me', { action: 'show', controller: 'blog', id: 1 }, { target: '_blank' })
Manuel
źródło
dziękuję za odpowiedź, zaoszczędziłem 2 godziny na debugowaniu i testowaniu
Carlos J García,
1

Aby dodać do poprzedniej odpowiedzi, poniższy format jest sugerowany przez rubocop. Może to stanowić zagrożenie dla bezpieczeństwa, ponieważ załadowana strona będzie mieć kontrolę nad poprzednią stroną i może zmienić swoją lokalizację w celu wyłudzenia informacji.

Aby temu zapobiec, należy dodać do kodu atrybut „rel”.

rel: 'noopener'

Teraz link_to powinno być:

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

rubocop docs

moody_drew
źródło