字符串插值到外部链接没有http://

我正在使用字符串插值来允许用户在他们的个人资料中放入一个网站,然后在外部链接到它,如下所示。

 17), "http://#{@user.portfolio}", :target => "_blank" %> 

但是当用户输入带有“Http://”的链接时,它最终会吐出“ http:// http://apple.com ”。

但是如果我从插值中删除http://它将不会变成外部链接。 它基本上将完整链接附加到我现有的主机URL。

我该如何解决这个问题?

我更喜欢清理用户输入一次(当用户输入数据时),而不是每次渲染数据时。 为此,请将以下内容添加到模型中:

 # in app/models/user.rb def portfolio=(url) if url.present? url = url.match(/https?:\/\//) ? url : "http://#{url}" write_attribute(:portfolio, url) end end 

然后在您的视图中使用它,如下所示:

 <%= link_to truncate(@user.portfolio_title, length: 17), @user.portfolio, rel: 'noopener', target: '_blank' %> 

注意:出于安全原因,您可能希望使用target: '_blank'始终与rel: 'noopener'一起使用。

也许您可以将此示例代码放在帮助程序中并获得所需内容

  def link_helper link if link[0..3] == "http" or link[0..4] == "https" link else "//#{link}" end end 

剥离http://从开始:

 <%= link_to truncate(@user.portfolio_title, :length => 17), "http://#{@user.portfolio.sub(%r!^http://!i, '')}", :target => "_blank" %>