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

时间:2013-05-23 18:57:55

标签: ruby-on-rails ruby-on-rails-3 link-to

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

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 之前设置@,它会给我一个错误未定义的方法`网站'为nil:NilClass

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

KR,Fabian

7 个答案:

答案 0 :(得分:59)

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

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

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

顺便说一下,您不能在该部分中使用@micropost,因为它不存在(您只有@micropostsmicropost)。

答案 1 :(得分:18)

您可以尝试以下代码:

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

这将创建一个在新标签页中打开的链接。

答案 2 :(得分: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)

你看到一个结果字符串。

此外,您还需要了解路径和网址助手之间的区别。 见ruby on rails guide.

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

答案 3 :(得分:1)

您可以使用ruby URI class

= 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>

答案 4 :(得分:0)

我使用postrank-uri gem来规范化网址,然后再将其传递给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://添加到网址中。

答案 5 :(得分:0)

我正在使用Rails 5,我遇到了同样的问题。我需要做的就是修复它,就是在我的link_to标签上加入协议。例如。我有 www.google.com.mx ,然后它应该是 http://www.google.com.mx 。这就像它在提到official doc时一样好。

所以,最后我在我的观点中只有这样的东西:

<%= 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" %>

我希望它可以帮助其他人。

答案 6 :(得分:-2)

这就是我的所作所为。

我们说我们有@person并且他有一个链接(@ person.link)#=&gt; 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 %>

为我工作