Search code examples
ruby-on-railsrubyreactjspaperclipreact-on-rails

Paperclip Unpermitted parameter: image


I am trying to get Paperclip to upload an image to s3 from my festival model on form submit but am receiving the Unpermitted parameter: image. error

I have checked the strong params, the model content validation and read through the paperclip documents with no avail.

I think I have narrowed the problem down to my post request to the DB cannot handle the File object that gets assigned to festival.image, but can't figure out how I would represent this in the post request.

I am capturing the data in rails using react on rails on the front end with Rails as the backend. I was following along with this sample code https://github.com/carlbaron/react-file-upload-demo

I also use React-dropzone to capture the uploaded file and it adds the preview attribute for the image preview.

Been stuck on this for some time now, any help greatly appreciated!

Beginning of the post request printed to console

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 object printed to the console festival object Post Request to the DB via 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

Festivals 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

Solution

  • As the image parameter in your request is a hash "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}, you will need to modify your festival_params method like this:

    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 me know if it solves the error.