34

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

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

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

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

4

4 回答 4

97

如果不存在,您可以在 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'
于 2011-02-16T20:50:05.720 回答
28

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

于 2011-02-16T03:22:35.433 回答
3

You are storing URLs without the http:// so they are being interpreted as relative URLs. Try this: link_to @user.site, "http://#{@user.url}"

于 2015-02-10T09:03:33.547 回答
1

试试很棒的宝石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"
于 2016-02-14T20:18:59.390 回答