在我的网站上,用户拥有个人资料,其中包含指向其个人外部网站的链接。我存储在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
答案 0 :(得分:59)
听起来您正在存储没有http://
的网址,因此它们被解释为相对网址。你只需要这样做:
link_to micropost.website, "http://#{micropost.website}"
或者可以在该模型中添加full_url
方法,如果它丢失则添加它。
顺便说一下,您不能在该部分中使用@micropost
,因为它不存在(您只有@microposts
或micropost
)。
答案 1 :(得分:18)
您可以尝试以下代码:
<%= link_to "your label", "your link with http", :target => "_blank" %>
这将创建一个在新标签页中打开的链接。
答案 2 :(得分:3)
你可以这样做:
link_to micropost.website, url_for(micropost.website)
您可以在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 %>
为我工作