【问题标题】:RAILS link_to external site, url is attribute of user table, like: @users.websiteRAILS 链接到外部站点,url 是用户表的属性,例如:@users.website
【发布时间】:2011-06-28 02:02:47
【问题描述】:

我正在开发一个允许用户创建帐户的网站。创建用户时的属性之一是用户个人网站。当我尝试像这样使用用户网站时:

<%= link_to @user.site, @user.url %>

生成的url是:http://0.0.0.0:3000/www.userswebsite.com

我认为这是因为 link_to 的 @user 部分...但是我怎样才能让它链接到 www.userwebsite.com 呢?

【问题讨论】:

    标签: ruby-on-rails ruby hyperlink external link-to


    【解决方案1】:

    如果不存在,您可以在 url 前面加上协议:

    module UrlHelper
      def url_with_protocol(url)
        /^http/i.match(url) ? url : "http://#{url}"
      end
    end
    

    然后:

    link_to @user.site, url_with_protocol(@user.url), :target => '_blank'
    

    【讨论】:

    • 使用 :target => '_blank' 而不是 :target => :blank。它没有按预期工作,您可以通过从新创建的窗口中打开相同的链接来尝试。
    • 如果我的 URL 不包含 www.,那么我的应用会将其视为内部链接。例如。 http://example.com 链接到当前页面。
    【解决方案2】:

    看起来您需要在链接上粘贴协议。例如。您的数据库中有 www.userswebsite.com,它应该是 http://www.userswebsite.com

    【讨论】:

    • 这可行,但依赖于能够始终在数据库中保留经过清理的 url,这可能并不总是可行...请参阅 Voldy 的答案,了解在出路时进行清理的网址
    【解决方案3】:

    您正在存储不带 http:// 的 URL,因此它们被解释为相对 URL。 尝试这个: link_to @user.site, "http://#{@user.url}"

    【讨论】:

      【解决方案4】:

      试试很棒的 gem Domainatrix:

      然后,您可以简单地动态解析 URL:

      <%= Domainatrix.parse(@user.url).url %>
      

      更好的是,在您的用户模型中创建一个 before_save 操作,该操作在保存之前解析 url。

      before_save :parse_url
      
      def parse_url
        if self.url
          self.url = Domainatrix.parse(self.url).url
        end
      end
      

      以下是您可以使用 Domainatrix 执行的一些示例:

      url = Domainatrix.parse("http://www.pauldix.net")
      url.url       # => "http://www.pauldix.net" (the original url)
      url.public_suffix       # => "net"
      url.domain    # => "pauldix"
      url.canonical # => "net.pauldix"
      
      url = Domainatrix.parse("http://foo.bar.pauldix.co.uk/asdf.html?q=arg")
      url.public_suffix       # => "co.uk"
      url.domain    # => "pauldix"
      url.subdomain # => "foo.bar"
      url.path      # => "/asdf.html?q=arg"
      url.canonical # => "uk.co.pauldix.bar.foo/asdf.html?q=arg"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 2022-11-19
        相关资源
        最近更新 更多