2016-04-13 7 views
0

Ich versuche, ein YouTube-Video in meine Rails-Anwendung einbetten und bin nach this guide:nicht definierte Methode `letzte‘ für nil: NilClass für youtube einbetten in Schienen

Ich habe diese Helfer geschrieben:

def embed(video) 
    youtube_id = @page.video.try(:split, "=").last || 'blank' 
    content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}") 
    end 

ich erhalte diese Fehlermeldung: nicht definierte Methode `letzte‘ für nil: NilClass

Hier ist, was ich in meiner Sicht haben: pages/show.html.erb

<div class="embed-container"> 
     <%= embed(@page.video) %> 
    </div> 

Der Leitfaden scheint ziemlich geradlinig, so dass ich nicht sicher bin, warum meine ursprüngliche Version nicht funktionierte.

Meine ursprüngliche Helfer sah wie folgt aus:

def embed(video) 
    youtube_id = video.split("=").last 
    content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}") 
    end 

aber es warf einen weiteren Fehler: nicht definierte Methode `split‘ für nil: NilClass

ich went here und fand, was ich dachte, könnte eine sein Lösung, aber es führte zu dem neuen Fehler oben. Ich habe auch versucht, @ page.video.split statt nur Video hinzuzufügen, weil es die Show-Ansicht für eine bestimmte Seite ist, aber ich bin mir nicht sicher, ob make einen Unterschied macht.

Irgendwelche Vorschläge, wie ich das zum Laufen bringen kann?

+0

Ihr ursprünglicher Helfer ist besser; Das Problem ist, dass '@ page.video' gleich null ist. – Ryan

+0

Überprüfen Sie, was '@ page.video' zurückgibt – psantos

+0

Was genau ist Ihre' @ Seite'? und kannst du zeigen, wo du es initialisierst? –

Antwort

1

Sie greifen auf @page Instanzvariable in Ihrem Helfer zu, aber Sie senden es auch als ein Argument.

def embed(video) 
    youtube_id = video.try(:split, "=").last || 'blank' 
    content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}") 
end 

<div class="embed-container"> 
    <%= embed(@page.video) %> 
</div> 

gesagt haben, dass das Problem ist, dass Ihr @page.videonil anstelle eines Video-URL-Zeichenfolge zurückgibt Ich denke, ... Stellen Sie sicher, @page.video etwas zurückgibt.

+0

Sie hatten also recht. Zuerst musste ich den eingebetteten Link-Code auf dieses <% = embed (@ page.video) setzen, außer @ page.video == nil%>. Ich hatte auch vergessen, Video zu starken Params hinzuzufügen. Danke für die Hilfe. – user3787971

+0

Gut zu helfen. Möglicherweise möchten Sie diese Antwort auswählen, sodass die Frage als abgeschlossen markiert wird. – Uzbekjon

Verwandte Themen