You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中link_to生成外部链接异常问题求助

问题根源

Rails的link_to方法对URL的解析逻辑是:

  • 当URL以http://或https://开头时,会被识别为绝对外部链接,直接跳转至目标站点;
  • 当URL没有协议头(如www.google.com)时,会被当作相对路径,自动拼接当前页面的域名和路径,最终生成类似localhost:3000/users/www.youtube.com的错误地址。

你当前的代码直接将link.url传入link_to,没有处理无协议头的URL场景,导致了这个问题。

解决方法

需要给没有协议头的URL自动补全https://协议,有两种常用方式:

1. 定义辅助方法(推荐)

在app/helpers/application_helper.rb中添加辅助方法:

def normalize_external_url(url)
  return url if url.start_with?('http://', 'https://')
  "https://#{url}"
end

然后在视图中调用:

<div class="col-10 d-flex justify-content-center gap-2">
  <% @user.links.each do |link| %>
    <% if link.url.length > 1%>
     <div>
      <%= link_to normalize_external_url(link.url), target: "_blank", class: "btn btn-primary" do %>
          <span><%= link.title %></span>
      <% end %>
     </div>
    <% end %>
  <% end %>
</div>

2. 视图内直接判断处理

如果不想新增辅助方法,也可以直接在视图里做判断:

<div class="col-10 d-flex justify-content-center gap-2">
  <% @user.links.each do |link| %>
    <% if link.url.length > 1%>
     <div>
      <%= link_to link.url.start_with?('http', 'https') ? link.url : "https://#{link.url}", target: "_blank", class: "btn btn-primary" do %>
          <span><%= link.title %></span>
      <% end %>
     </div>
    <% end %>
  <% end %>
</div>

内容的提问来源于stack exchange,提问作者rubyongainz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:06:06