Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 验证可选字段的\u附件_Ruby On Rails_Paperclip Validation - Fatal编程技术网

Ruby on rails 验证可选字段的\u附件

Ruby on rails 验证可选字段的\u附件,ruby-on-rails,paperclip-validation,Ruby On Rails,Paperclip Validation,我有一个uload字段,它是可选的,可以保留为空。但是当它被使用时,我想验证附件的大小和内容。因此,我在模型中使用此验证: validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes } 当存在附件时,此操作有效,但当附件为空时,此操作失败。如何确保它仅在有附加文件时才进行验证 不幸

我有一个uload字段,它是可选的,可以保留为空。但是当它被使用时,我想验证附件的大小和内容。因此,我在模型中使用此验证:

validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes }
当存在附件时,此操作有效,但当附件为空时,此操作失败。如何确保它仅在有附加文件时才进行验证

不幸的是,上述解决方案不起作用。

请尝试以下方法:

has_attached_file :attachment, :styles => { :small => "200x200>" }
validates_attachment :attachment,
    :size => { :in => 0..500.kiobytes },
    :content_type => { :content_type => /^image\/(jpeg|png|gif|tiff)$/ }

它正在我的应用程序上工作。除非我设置了默认附件,以防用户选择不上传附件。

您提供的链接提供了我的建议-使用
if:
参数

--

如果:

基本上允许您确定验证器将启动的条件。我从链接中看到,这些人正在使用
if::avatar\u changed?

您可能遇到的问题是,您可以使用
Proc
实例方法来确定条件;由于这些家伙在《阿凡达》(avatar)上使用了一种方法(尽管是内置的),所以不太可能产生你想要的结果

我会这样做:

validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes }, if: Proc.new {|a| a.attachment.present? }
这基本上确定是否存在
附件
对象,为验证提供
true
false