2017-02-23 3 views
1

Ich versuche, Paperclip zu bekommen, um ein Bild zu s3 von meinem Festival-Modell auf dem Formular zu senden, aber empfange den unerlaubten Parameter: Bild. FehlerPaperclip unerlaubter Parameter: image

Ich habe die starken Params, die Validierung des Modellinhalts überprüft und die Büroklammer Dokumente ohne Erfolg durchgelesen.

Ich denke, ich habe das Problem auf meine Post Anfrage an die DB eingegrenzt kann nicht mit dem File-Objekt, das zu festival.image zugewiesen wird, aber kann nicht herausfinden, wie ich dies in der Post-Anfrage darstellen würde.

Ich erfasse die Daten in Schienen mit Reagieren auf Schienen am Frontend mit Rails als Backend. Ich folgte mit diesem Beispielcode https://github.com/carlbaron/react-file-upload-demo

Ich verwende auch React-dropzone, um die hochgeladene Datei zu erfassen, und es fügt das Vorschauattribut für die Bildvorschau hinzu.

Seit einiger Zeit auf diesem fest, jede Hilfe sehr geschätzt!

Beginn der Post-Anforderung gedruckt zu trösten

Processing by FestivalsController#create as JSON 

Parameters: {"festival"=>{"fest_name"=>"Test Festival", "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}}} 

| Unpermitted parameter: image 

Festival Objekt auf die Konsole gedruckt festival object Beitrag Anfrage an die DB über axios

postFestival(festival) { 
    let config = { 
     responseType: 'json', 
     processData: false, 
     contentType: false, 
     headers: ReactOnRails.authenticityHeaders(), 
    }; 
     let str = JSON.stringify(festival); 
     console.log("ENTITY IS " + str); 

     //returns 
     //ENTITY IS {"fest_name":"Test Festival","image":{"preview":"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}} 

     return(
     request.post('/festivals/create', {festival}, config) 
    ); 
    }, 

Festival .rb

class Festival < ApplicationRecord 

    has_attached_file :image, default_url: "/assets/ASOT-COVER.png" 
    validates_attachment :image, 
         content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] } 


    end 

Feste-Controller

def create 

    @festival = Festival.create(festival_params) 

    puts "festival.image =" + @festival.image.inspect 
    #returns = festival.image =#<Paperclip::Attachment:0x007fc288868bf0 @name=:image, @name_string="image", @instance=# 

    if @festival.save 
     puts "Festival SAved = + " + @festival.inspect 
     #returns the festival object saved to the DB minus the image param 
    else 
     respond_to do |format| 
     format.json { render json: @festival.errors, status: :unprocessable_entity} 
     puts "ERROR = " + @festival.errors.inspect 
     end 
    end 

    private 

    def festival_params 

     params.require(:festival).permit(:fest_name, :fest_organizer, :fest_location, 
             :fest_date, :fest_url, :fest_venue, :fest_description, 
            :image) 
    end 
    end 

Antwort

1

Da der image Parameter in Ihrer Anfrage ist ein Hash "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}, müssen Sie Ihre festival_params Methode wie folgt ändern:

def festival_params 
    params.require(:festival).permit(:fest_name, :fest_organizer, :fest_location, 
            :fest_date, :fest_url, :fest_venue, :fest_description, 
           { image: :preview }) 
end 

Let Ich weiß, ob es den Fehler löst.

+0

Danke, das hat den unzulässigen param-Fehler beseitigt! Jetzt bekomme ich den Paperclip No Handler Error für {"preview" => "blob: http: // localhost: 5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"} aber von anderen Stack-Überlauf-Fragen wäre Im nicht korrekt übergeben Klasse zu Paperclip, also werde ich versuchen, dies zu untersuchen, wenn ich nach Hause komme! – monopolyman