Rails:在新标签中打开链接(使用'link_to')

Dan*_*tes 135 ruby ruby-on-rails ruby-on-rails-3

我有这个代码:

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

当用户点击链接时,如何在新标签页中将其打开?

Bal*_*ick 261

target: :_blank 参数应该是一个参数link_to,而你把它的image_tag参数.像这样修改你的代码:

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

或者用一个块:

<%= link_to "http://www.facebook.com/mypage", target: :_blank do %>
  <%= image_tag("facebook.png", class: :facebook_icon, alt: "Facebook") %>     
<% end %>  
Run Code Online (Sandbox Code Playgroud)


Ale*_*ldo 14

试试这个:

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


Dee*_*ale 8

您也可以使用target: :_blank而不是target: '_blank'

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

link_to do

<%= link_to "http://www.facebook.com/mypage", target: :_blank do %>
  <%= image_tag "facebook.png", class: "facebook_icon", alt: "Facebook" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)


小智 7

为了补充之前的答案,下面的格式是 rubocop 建议的格式。这可能存在安全风险,因为加载的页面将控制前一页,并可能出于网络钓鱼目的更改其位置。

为了防止这种情况,需要在代码中添加“rel”属性。

rel: 'noopener'
Run Code Online (Sandbox Code Playgroud)

现在 link_to 应该是:

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

rubocop 文档