如何将变量link_to定义到外部URL

在我的网站上,用户拥有个人资料,其中包含指向其个人外部网站的链接。 我存储在名称网站下的postgresql数据库中的网站的url 。 当我测试结果时,我总是得到这样的url:

http://localhost:3000/www.example.com 

而不是http://www.example.com

我的观点index.html.erb如下所示:

  

All projects

和我的_micropost.html.erb这样:

 
  • Posted ago.
  • 我不知道在这种情况下有什么问题。 如果我在micropost.website之前设置一个@,它会给我一个错误的未定义方法`website’为nil:NilClass

    有没有人可以帮助我(我是RoR初学者)?

    KR,Fabian

    听起来您正在存储没有http:// URL,因此它们被解释为相对URL。 你只需要做这样的事情:

     link_to micropost.website, "http://#{micropost.website}" 

    或者可以在该模型中添加一个full_url方法,如果它缺失则添加它。

    顺便说一下,你不能在那部分中使用@micropost ,因为它不存在(你只有@microposts或者micropost @microposts )。

    您可以尝试以下代码:

    <%= link_to "your label", "your link with http", :target => "_blank" %>

    这将创建一个在新选项卡中打开的链接。

    你可以这样做:

     link_to micropost.website, url_for(micropost.website) 

    请参阅Rails Api:url_for

    您可以在rails控制台中进行实验。 只需键入控制台:

     micropost = Micropost.first helper.link_to micropost.website, url_for(micropost.website) 

    你看到一个结果字符串。

    您还需要了解路径和URL助手之间的区别。 请参阅ruby on rails指南。

    五郎权利。 您需要在网站属性中添加“http://”。 validation之后,在将Model实例保存到数据库之前,需要添加此前缀。

    您可以使用ruby URI类

     = link_to micropost.website, URI::HTTP.build({:host => micropost.website}).to_s, target: "_blank" # www.example.com 

    我使用postrank-uri gem来规范化url,然后将其传递给link_to

     class User < ActiveRecord::Base def normalized_webpage webpage && PostRank::URI.normalize(webpage).to_s end end 

    然后你可以在你的视图中使用link_to "website", user.normalized_webpage, target: "_blank" 。 例如,如果缺少http:// ,则将其添加到url中。

    我正在使用Rails 5,我遇到了同样的问题。 我需要做的就是修复它,就是在我的link_to标签上包含协议。 例如,我有www.google.com.mx ,那么它应该是http://www.google.com.mx 。 这就像它在官方文档中提到的那样工作得很好。

    所以,最后我在我看来只有这样的东西:

     <%= link_to (content_tag(:i, "help", class: 'material-icons tiny')), " http://www.google.com.mx", target: "_blank", rel: "alternate" %> 

    这与:

     <%= link_to "help", "http://www.google.com.mx", target: "_blank", rel: "alternate" %> 

    我希望它可以帮助别人。

    这就是我做的。

    假设我们有@person,他有一个链接(@ person.link)#=> http://www.google.com

    在你的助手中创建这样的东西

     def extlink(link) if link.include?("http://") puts link else link.insert(0, "http://") link end 

    结束

    在你的文件中,你可以做到

     <% @person.each do |p| %> <%= link_to 'External', extlink(p.link) %> <% end %> 

    适合我