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

Faw*_*wyd 33 ruby-on-rails link-to ruby-on-rails-3

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

http://localhost:3000/www.example.com
Run Code Online (Sandbox Code Playgroud)

代替 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 %>
Run Code Online (Sandbox Code Playgroud)

和我的_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>
Run Code Online (Sandbox Code Playgroud)

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

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

KR,Fabian

Gor*_*oro 62

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

link_to micropost.website, "http://#{micropost.website}"
Run Code Online (Sandbox Code Playgroud)

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

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


小智 20

您可以尝试以下代码:

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

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