我得到这个错误时,我试图上传使用回形针与我的rails博客应用程序。 当它说"MissingRequiredValidatorError"时,不确定它指的是什么 我认为通过更新post_params并给它:image就可以了,因为create和update都使用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    

这是我的帖子助手

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

请让我知道我是否可以补充额外的材料来帮助你帮助我。


从回形针4.0版开始,所有的附件都需要包含一个content_type验证,一个file_name验证,或者显式地声明它们都不会有。

如果不执行上述操作,回形针将引发Paperclip::Errors::MissingRequiredValidatorError错误。

在本例中,您可以在指定has_attached_file:image后,将以下任何一行添加到Post模型中

选项1:验证内容类型

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

- or -另一种方法

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

- or -另一种方式

是使用正则表达式验证内容类型。

例如:若要验证所有图像格式,可指定regex表达式,如

@LucasCaton的回答

选项2:验证文件名

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

选项3:不验证

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

do_not_validate_attachment_file_type :image

注意:

在上面的content_type/ matches选项中指定你需要的MIME类型。我刚刚给出了一些图像MIME类型供您开始使用。

参考:

如果仍然需要验证,请参阅回形针:安全验证。:)

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


只要输入你的模型:

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

https://github.com/thoughtbot/paperclip


我也找不到任何一个解。我尝试了Paperclip 3.1,但无法使用,我的应用程序一直告诉我,我的图像文件扩展名不被批准,尽管它们是jpg格式的。

我最终在3.5.1版本中获得了成功。


需要在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 => "/images/: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 => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end

确保你的post模型是这样的…

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