0

Ich baue eine Fotogalerie-Anwendung, die es Benutzern ermöglicht, mehrere Fotos an jede ihrer Galerien anzuhängen. Ich verwende Paperclip, um Datei-Uploads zu verarbeiten."Parameter fehlt oder der Wert ist leer:" Büroklammer keine Datei ausgewählt - Rails

Der folgende Code funktioniert, bis [Upload] auf das Formular geklickt wird, ohne dass eine Datei ausgewählt wurde. So wie ich es verstehe, bleibt es beim Controller hängen, bevor es an das Photo Modell übergeben wird, um seine Anwesenheits-, Dateityp- und Dateigrößenvalidierungen auszuführen.

Der Fehler erhalten, wenn [Upload] klicken, ohne Datei ausgewählt ist: „param fehlt oder der Wert leer ist: photo“ Extrahiert Quelle hat photo#photo_params Linie markiert.

Gallery Modell:

class Gallery < ActiveRecord::Base 
    belongs_to :user 
    has_many :photos 
end 

Fotomodell:

class Photo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :gallery 

    has_attached_file :photo, 
    s3_permissions: :private 

    validates_attachment :photo, 
    presence: true, 
    content_type: { 
     content_type: [ 
     "image/jpeg", # JPEG/JPG 
     "image/png" # PNG 
     ] }, 
    size: { in: 0..5.megabytes } 
end 

Controller-Aktion (Fotos # erstellen):

def create 
    @photo = Photo.new(photo_params) 
    @photo.gallery_id = @gallery.id 
    @photo.user_id = current_user.id 

    if @photo.save 
     flash[:success] = "Photo successfully saved." 
     redirect_to gallery_path(@photo.gallery) 
    else 
     flash[:error] = "The photo upload failed! Make sure the file you're trying to upload is of a supported type (JPG, JPEG or PNG) and try again." 
     redirect_to gallery_path(@photo.gallery) 
    end 
    end 

Strong Param (Fotos # photo_params):

def photo_params 
    params.require(:photo).permit(:photo) 
end 

hochladen Form:

<%= form_for Photo.new, url: gallery_photos_path(@gallery) do |f| %> 
    <%= f.label :photo %> 
    <%= f.file_field :photo %> 

    <%= f.submit "Upload" %> 
    <% end %> 

Ich weiß, dass Model.new in Form verwendet, ist wahrscheinlich kein Best-Practice sondern weil die Form als Teil auf Galerien # show Ansicht geladen wird, war es Der einzige Weg, wie ich es in Gang bringen könnte.

Ich denke auch, dass das Modell :photo und die tatsächliche Paperclip-Anlage auch :photo genannt möglicherweise ein Problem verursacht. Ist das richtig?

Weiß jemand, was hier vor sich geht?

Antwort

0

Ja ich denke, wie Sie erwähnt, sollten Sie Ihre Büroklammer Anlage umbenennen, obwohl ich nicht sicher bin, ob es irgendwelche Probleme verursacht, Code wie photo_params.require(:photo).permit(:photo) kann nicht gut sein.

Zusätzlich für Ihre andere Bedingung in create, versuchen Sie zuerst zu root_path umleiten. Ich denke, dass Ihre Route falsch ist, da Ihre @ Photo-Instanzvariable eigentlich Photo.new ist.

Hoffe es hilft a! Ich bin kein Schienenexperte. Prost.

0

Mit Blick auf den Fehler, ich denke, es ist die Anwesenheit von 'Foto' in Params zu validieren.

Wie Sie hinzugefügt haben Präsenz: true 'in validates_attachment: Foto Block, müssen Sie das in params liefern

ODER

, wenn Sie Formular hochladen möchten, ohne Datei sollten Sie Präsenz: true' entfernen Zwang.

0

photo_params def

params.require(:photo).permit(:photo) 

Ende

Änderung der Name des Attributs es mit modalen immer verwirren und attribut Name

def sein kann photo_params

params.require (: Foto) .permit (: photo_url)

Ende

Verwandte Themen