I'm getting this error when I try to upload using paperclip with my rails blogging app. Not sure what it is referring to when it says "MissingRequiredValidatorError" I thought that by updating post_params and giving it :image it would be fine, as both create and update use post_params
Paperclip::Errors::MissingRequiredValidatorError in PostsController#create
Paperclip::Errors::MissingRequiredValidatorError
Extracted source (around line #30):
def create
@post = Post.new(post_params)
This is my posts_controller.rb
def update
@post = Post.find(params[:id])
if @post.update(post_params)
redirect_to action: :show, id: @post.id
else
render 'edit'
end
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to action: :show, id: @post.id
else
render 'new'
end
end
#...
private
def post_params
params.require(:post).permit(:title, :text, :image)
end
and this is my posts helper
module PostsHelper
def post_params
params.require(:post).permit(:title, :body, :tag_list, :image)
end
end
Please let me know if I can supplement extra material to help you help me.
Make sure your post model looks like this...
Starting with
Paperclip version 4.0
, all attachments are required to include a content_type validation, a file_name validation, or to explicitly state that they're not going to have either.Paperclip raises
Paperclip::Errors::MissingRequiredValidatorError
error if you do not do any of this.In your case, you can add any of the following line to your
Post
model, after specifyinghas_attached_file :image
Option 1: Validate content type
-OR- another way
-OR- yet another way
is to use regex for validating content type.
For example: To validate all image formats, regex expression can be specified as shown in
@LucasCaton's answer
Option 2: Validate filename
Option 3: Do not validate
If for some crazy reason (can be valid but I cannot think of one right now), you do not wish to add any
content_type
validation and allow people to spoof Content-Types and receive data you weren't expecting onto your server then add the following:Note:
Specify the MIME types as per your requirement within
content_type
/matches
options above. I have just given a few image MIME types for you to start with.Reference:
Refer to Paperclip: Security Validations, if you still need to verify. :)
You might also have to deal with the spoofing validation explained here https://stackoverflow.com/a/23846121
I couldn't get any of these solutions to work either. I tried Paperclip 3.1, but couldn't then my app kept telling me my image file extensions weren't approved, even though they were jpg.
I finally found success with version 3.5.1.
Just put in your model:
https://github.com/thoughtbot/paperclip
Need to add validates_attachment_content_type in Model
Rails 3
Rails 4