34 votes

RAILS link_to external site, url is attribute of user table, like : @users.website

Je travaille sur un site web qui permet aux utilisateurs de créer un compte. L'un des attributs lors de la création d'un utilisateur est le site web personnel de l'utilisateur. Lorsque j'essaie d'utiliser le site Web de l'utilisateur comme ceci :

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

L'url qui est générée est : http://0.0.0.0:3000/www.userswebsite.com

Je pense que c'est à cause de la partie @user du link_to... mais comment faire pour que le lien renvoie à www.userwebsite.com ?

95voto

Voldy Points 7388

Vous pouvez ajouter le protocole à l'url s'il est absent :

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

Et puis :

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

28voto

cam Points 8882

On dirait que vous devez coller le protocole sur votre lien. Par exemple, si vous avez www.userswebsite.com dans votre base de données, ce devrait être http://www.userswebsite.com

3voto

Anshul Garg Points 172

Vous stockez les URL sans le http:// et elles sont donc interprétées comme des URL relatives. Essayez ceci : link_to @user.site, " http://# {@utilisateur.url}"

1voto

Abram Points 3501

Essayez le bijou génial Domainatrix :

Ensuite, vous pouvez simplement analyser l'URL à la volée avec :

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

Mieux encore, créez un before_save dans votre modèle utilisateur qui analyse l'url avant de l'enregistrer.

before_save :parse_url

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

Voici quelques exemples de ce que vous pouvez faire avec 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"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X