Rails:在新标签页中打开链接(带有“ link_to”)


139

我有以下代码:

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

当用户单击链接时,如何在新选项卡中打开它?

Answers:


269

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

14

试试这个:

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

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

3

如果您正在寻找如何在html中的新标签中打开链接(对于任何来自Google的人),请点击以下网址:

<a href="http://www.facebook.com/mypage" target="_blank">Link name</a>

8
我不会拒绝您的投票,但是此页面专门涉及Ruby的link_to(摘自标题)。
Herb Meehan 2015年

1
@HerbMeehan我不确定是否要投票,但这在解释其target: :_blank含义时很有用。
Andrew Grimm

1

我的理解是:您可以要求浏览器打开一个新选项卡或一个新站点。但这取决于用户设置。我认为这个问题已经回答。

除了有必要将链接选项与html选项分开时,我陷入了陷阱:

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

例:

link_to('Click me', { action: 'show', controller: 'blog', id: 1 }, { target: '_blank' })

感谢您的回答,为我节省了2个小时的调试和测试
Carlos

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文档

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.