42

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

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

代替http://www.example.com

我的视图index.html.erb如下所示:

<% provide(:title, 'All projects') %>
<h1>All projects</h1>

<%= will_paginate %>

<ul class="microposts">
    <%= render @microposts %>
</ul>

<%= will_paginate %>

和我的_micropost.html.erb是这样的:

<li>
    <span class="title"><%= micropost.title %></span>
    <span class="website"><%= link_to micropost.website, micropost.website %></span>
    <span class="content"><%= micropost.content %></span>
    <span class="timestamp">
        Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    </span>
</li>

我不知道在这种情况下有什么问题。如果我在micropost.website之前设置一个 @它会给我一个错误undefined method `website' for nil:NilClass

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

KR,费边

4

7 回答 7

66

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

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

或者可能full_url会向该模型添加一个方法,如果它丢失则添加它。

顺便说一句,你不能@micropost在那个部分中使用,因为它不存在(你只有@micropostsor micropost)。

于 2013-05-23T19:21:22.987 回答
24

您可以尝试使用以下代码:

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

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

于 2015-09-01T00:48:45.780 回答
3

你可以这样做:

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://”添加到您的网站属性。在验证之后并将模型实例保存到数据库之前,您需要添加此前缀。

于 2013-05-23T19:27:05.533 回答
3

您可以使用 ruby​​ URI 类

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

# <a target="_blank" href="http://www.example.com">www.example.com</a>
于 2016-10-03T22:25:06.207 回答
0

我使用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。

于 2016-03-01T15:14:42.607 回答
0

我正在使用 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" %>

我希望它可以帮助别人。

于 2016-12-15T21:50:14.097 回答
-2

这就是我所做的。

假设我们有@person,他有一个链接 (@person.link) # => 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 %>

为我工作

于 2014-04-19T00:42:47.813 回答