RAILS link_to external site, url является атрибутом пользовательской таблицы, например: @ users.website - PullRequest
34 голосов
/ 16 февраля 2011

Я работаю над сайтом, который позволяет пользователям создавать учетные записи.Одним из атрибутов при создании пользователя является личный веб-сайт пользователя.Когда я пытаюсь использовать веб-сайт пользователей следующим образом:

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

URL, который генерируется: http://0.0.0.0:3000/www.userswebsite.com

Я думаю, что это из-за @user части link_to... но как я могу получить это по ссылке на www.userwebsite.com?

Ответы [ 4 ]

95 голосов
/ 16 февраля 2011

Вы можете добавить 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'
28 голосов
/ 16 февраля 2011

Похоже, вам нужно прикрепить протокол к вашей ссылке.Например, у вас есть www.userswebsite.com в вашей базе данных, это должно быть http://www.userswebsite.com

3 голосов
/ 10 февраля 2015

Вы храните URL-адреса без http: //, поэтому они интерпретируются как относительные URL-адреса.Попробуйте это: link_to @ user.site, " http: // # {@ user.url}"

1 голос
/ 14 февраля 2016

Попробуйте удивительный гем 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"
...