当我尝试使用带有 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
请让我知道我是否可以补充额外的 Material 来帮助你帮助我。
最佳答案
从 Paperclip version 4.0
开始,所有附件都需要包括 content_type 验证、file_name 验证,或者明确声明它们不会有。
如果您不执行任何操作,Paperclip 会引发 Paperclip::Errors::MissingRequiredValidatorError
错误。
在您的情况下,您可以将以下任何一行添加到您的 Post
模型中, 之后 指定 has_attached_file :image
选项 1:验证内容类型
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"] }
- 或 - 另一种方式
是使用正则表达式来验证内容类型。
例如:要验证所有图像格式,可以指定正则表达式,如下所示
@LucasCaton's answer
选项 2:验证文件名
validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/]
选项 3:不验证
如果出于某种疯狂的原因(可能是有效的,但我现在想不出一个),您不希望添加任何
content_type
验证并允许人们欺骗内容类型并接收您不期望的数据到您的服务器上,然后添加下列的:do_not_validate_attachment_file_type :image
注:
根据您的要求在上面的
content_type
/matches
选项中指定 MIME 类型。 我刚刚给出了一些图像 MIME 类型供您开始。引用:
如果还需要验证,请引用 Paperclip: Security Validations 。 :)
您可能还需要处理此处解释的欺骗验证 https://stackoverflow.com/a/23846121
关于ruby-on-rails - Paperclip::Errors::MissingRequiredValidatorError with Rails 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21897725/