【问题标题】:Rails: Having a small issue with link_to and external URLsRails:link_to 和外部 URL 有一个小问题
【发布时间】:2016-02-05 09:49:14
【问题描述】:

对 Rails 很陌生。我正在做一个用户提交 url 和标题的项目。 title 应该链接到用户提供的 url。 url 存储为link 的参数。

这是索引视图中的代码:

<% @links.each do |link| %>
  <%= link_to link.title, link.url %>
  <%= link_to "comments", link %>
<% end %>

这在大多数情况下都有效。

如果提交的 url 不是以http:// 开头,就会出现问题。实际上,它指向http://localhost:3000/google.com,我收到错误No route matches [GET] "/google.com"

我该如何解决这个问题?我尝试将其更改为:

<%= link_to link.title, "http://#{link.url}" %>

这使得google.com 工作,但随后http://google.com 不知何故变成了http://http//google.com

我相信修复将是一个面部手掌时刻!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    如果不存在,则在 url 前面加上协议:

    module ApplicationHelper
      def url_with_protocol(url)
        /^http/i.match(url) ? url : "http://#{url}"
      end
    end
    
    <%= link_to link.title, url_with_protocol(link.url) %>
    

    答案来自this SO 问题/答案

    【讨论】:

    • 谢谢迈尔斯。我应该把那个模块放在哪里?
    • 糟了!非常感谢迈尔斯!这加上来自@jeffersonchoi 的答案的变体解决了我的问题。
    【解决方案2】:

    在您的输入字段中,您可以执行&lt;input type="text" name="url" value="http://"&gt; 之类的操作,这样您的网址将始终以 http:// 开头。如果需要,用户也可以手动将其更改为 https。

    我也可以在模型中添加一个full_url 方法,如果它丢失了就添加它。

    【讨论】:

    • 谢谢,这行得通,但是如果用户很烦人并在提交之前从字段中删除了http://,然后出现该错误怎么办?
    • @tdog 然后我会做与下面显​​示的答案相同的事情。如果不存在,则在 URL 前面添加。我会说最好将http:// 包含在前端,后端是一个安全的检查,看看我是否需要预先添加 url。
    • 谢谢,现在可以顺利运行了 :) 每天都在学习一些东西!
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2012-04-14
    相关资源
    最近更新 更多