2017-12-09 4 views
-1

Ich arbeite an der Rails-Anwendung, mit Ubuntu. Alles war in Ordnung, bis ich versucht habe, Bilder auf der Website mit Paperclip Gem und Imagemagick hinzuzufügen.Ruby on Rails v5.1 und Paperclip gem

Ich habe den Code wie erforderlich implementiert, einschließlich Modelle, Controller und wahrscheinlich Ansichten, und wenn ich auf die Schaltfläche zum Erstellen/Übermitteln klicken, werden alle Felder im Formular akzeptiert und in der Datenbank aktualisiert, einschließlich Bildern. Aber auf der Website gibt es die folgenden Fehler:

undefined method `image' for nil:NilClass 

und das ist die Linie, die den Fehler verursacht:

<%= image_tag @current_user.image.url(:medium) %> 

Ich habe bereits versucht, die Datenbank zu löschen und mit neuer Migration zu arbeiten, aber Der Fehler tritt immer noch auf, wenn ich versuche, einen neuen Benutzer zu erstellen.

+0

Der Fehler besagt, '@ current_user' ist null und hat keine Bildmethode (oder Attribut), können Sie den Wert von' @ current_user' überprüfen? –

+0

# ]> – donkihot5

+0

Dies ist der Datenbankeintrag, wenn ich das Formular abschicke – donkihot5

Antwort

0

Wie in den Kommentaren erwähnt, @current_user ist ein ActiveRecord::Relation, aber Sie müssen einen Datensatz Zugang image. Da es so aussieht, nur in der Beziehung ein Element haben, können Sie den ersten Zugriff (und einzige) Datensatz mit dem first Methode:

<%= image_tag @current_user.first.image.url(:medium) %> 

Allerdings wäre ein besserer Ansatz diese im Controller zu tun oder Helper das setzt @current_user an erster Stelle. Sie können einfach .first an den Ausdruck anhängen, den Sie verwenden, um @current_user festzulegen.

Ein Vorbehalt, indem Sie .first anhängen, Sie werden immer den ersten Datensatz in der Beziehung auswählen. Wenn Ihre Abfrage mehrere Datensätze zurückgibt, erwarten alle Datensätze, dass der erste Datensatz ignoriert wird. Dies ist normalerweise kein Problem, wenn Ihre Abfrage nach einer eindeutigen ID sucht.

+0

Wie meinst du ein Element in der Beziehung, wenn Sie einen Benutzer meinen, das ist derzeit, Da ich die db löschen musste, wenn Sie meinen, dass ein Benutzer ein Bild hat, dann könnte Ihre Antwort funktionieren – donkihot5

+0

Ich meine, was auch immer Sie verwenden, um zu berechnen '@ current_user' gibt nur einen Benutzerdatensatz zurück. Sie können diesen Datensatz mit der 'ersten' Methode auswählen. Das wirkliche Problem hier ist mit dem Code, den Sie verwenden, um '@ current_user' nicht mit Ihrer Ansicht zu berechnen. Möglicherweise möchten Sie diesen Code in Ihrer Frage veröffentlichen. –

+0

Ich habe es schließlich zu arbeiten, aber neues Problem, das ich habe, ist mit der Größe des Bildes, es ist aus, auch wenn ich es im Modell ändern. Nun, jetzt muss ich das reparieren.Vielen Dank für Ihre Zeit und Hilfe, ich schätze es, schließlich war das Problem in den Variablen, die ich verwendet habe. – donkihot5