it-swarm.com.de

Wie definiere ich eine Variable link_to zu einer externen URL?

Auf meiner Website hat ein Benutzer ein persönliches Profil mit einem Link zu seiner persönlichen externen Website. Die URL der Sites, die ich in einer postgresql-Datenbank unter dem Namen website speichere. Wenn ich das Ergebnis teste, erhalte ich immer eine URL wie diese:

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

anstatt von http://www.example.com

Meine Ansicht index.html.erb sieht so aus:

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

<%= will_paginate %>

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

<%= will_paginate %>

und mein _ micropost.html.erb wie folgt:

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

Ich weiß nicht, was das Problem in diesem Fall ist. Wenn ich ein @ vor micropost.website gesetzt habe, erhalte ich einen Fehler ndefinierte Methode `website 'für nil: NilClass

Kann mir jemand helfen (ich bin ein RoR-Anfänger)?

KR, Fabian

32
Fawyd

Es hört sich so an, als ob Sie URLs ohne http:// Speichern, sodass sie als relative URLs interpretiert werden. Sie müssen nur so etwas tun:

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

oder fügen Sie dem Modell eine full_url - Methode hinzu, die es hinzufügt, wenn es fehlt.

Übrigens können Sie @micropost In diesem Teil nicht verwenden, da es nicht existiert (Sie haben nur @microposts Oder micropost).

61
Goro

Sie können es mit folgendem Code versuchen:

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

Dadurch wird ein Link erstellt, der auf einer neuen Registerkarte geöffnet wird.

19
Dimang Chou

Sie können so etwas tun:

link_to micropost.website, url_for(micropost.website)

Siehe Rails Api: url_for

Sie können in Rails console experimentieren. Geben Sie einfach console ein:

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

Und Sie sehen eine Ergebniszeichenfolge.

Außerdem müssen Sie den Unterschied zwischen Pfad- und URL-Helfern kennenlernen. Siehe Ruby auf Rails Anleitung.

Goro-Rechte. Sie müssen Ihrem Website-Attribut "http: //" hinzufügen. Nach der Validierung und vor dem Speichern der Modellinstanz in der Datenbank müssen Sie dieses Präfix hinzufügen.

3
s.vatagin

Sie können Ruby RI class verwenden

= 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>
2
Eric Norcross

Ich arbeite mit Rails 5 und hatte das gleiche Problem. Alles, was ich tun musste, um es zu beheben, war, das Protokoll in mein link_to Etikett. Z.B. Ich hatte www.google.com.mx, dann sollte es sein http://www.google.com.mx. Und das wars, es funktioniert prima, wie in offizielles Dokument erwähnt.

Also, endlich habe ich so etwas aus meiner Sicht:

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

Welches ist das gleiche wie:

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

Ich hoffe es hilft jemand anderem.

0
Alex Ventura

Ich benutze den Edelstein postrank-uri , um die URL zu normalisieren, bevor ich sie an link_to Weitergebe.

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

Dann können Sie in Ihrer Ansicht link_to "website", user.normalized_webpage, target: "_blank" Verwenden. Dies fügt zum Beispiel den http:// Zur URL hinzu, falls dieser fehlt.

0
Oleander