Frage

Ich bin Umgang mit Dateianhängen in meine Rails-Anwendung mit Attachment_fu, die eine public_filename Methode bietet eine Datei die URL abzurufen. Ich verwende es auf einem Modell Abdeckung genannt, also wenn ich die URL einer hochgeladenen Titelbild aufrufen möchten, in einer Ansicht, die ich tun würde:

<%= image_tag(@cover.public_filename) %>

Dies funktioniert gut, wenn der Benutzer die entsprechende Anlage hat, aber in meiner Anwendung es ist keine Voraussetzung für einen Benutzer, eine Anlage zu laden.

Daher @cover.public_filename Aufruf wird eine Typeerror werfen. Kann nicht gleich Null in String aus dem offensichtlichen Grund konvertieren, dass die Datei gleich Null ist

Aber ich habe Probleme beim Hinzufügen von Logik für dieses Problem effektiv, da das Objekt gleich Null ist, und alle meine Versuche, mit Dingen wie unless @cover.public_filename.nil? oder if @cover.public_filename == nil haben dabei gewesen fruchtlos und verursachen den gleichen Typ Fehler.

Was bin ich fehlt?

War es hilfreich?

Lösung

Ich habe nicht mit attachment_fu arbeiten, aber wie ich sehe public_filename ist Methode, die auf einigen Feldern beruht, die gleich Null sind, wenn Sie nicht über Befestigung angebracht. Hier ich gelesen, dass attachment_fu sollte immer hat Befestigung - und dies ist wahrscheinlich ein Grund, warum es nicht für Sie arbeiten. Der Autor auch vorschlagen Büroklammer Plugin. Werfen Sie einen Blick auf sie!

Andere Tipps

<%= image_tag(@cover.public_filename) unless @cover.nil? %>

kann leider nicht kommentieren, so ist hier ein Update statt:

@cover.public_filename? wird hier nicht arbeiten, weil @cover ein nil Objekt ist und als solche haben keine public_filename? Methode.

nil.respond_to?('public_filename?') #=> false

Aktualisiert:

Machen Sie es:

<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top