我有一个uload字段是可选的,它可以留空。但是当它被使用时,我想验证附件的大小和内容。所以我在模型中使用了这个验证:
validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes }
当有附件时,它会起作用,但当它留空时会失败。如何确保只在附加文件时验证?
不幸的是,here提到的解决方案无效。
答案 0 :(得分:2)
您提供的链接是根据我的建议 - 使用if:
参数
-
<强> if:
强>
Using if:
in your validation基本上允许您确定验证器将触发的条件。我从链接中看到,这些人正在使用if: :avatar_changed?
您可能遇到的问题是,您可以使用Proc
或instance method
来确定条件;而且这些人正在使用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? }
这基本上决定了attachment
对象是否存在,为验证提供true
或false
答案 1 :(得分:0)
试试这个:
has_attached_file :attachment, :styles => { :small => "200x200>" }
validates_attachment :attachment,
:size => { :in => 0..500.kiobytes },
:content_type => { :content_type => /^image\/(jpeg|png|gif|tiff)$/ }
它正在开发我的应用程序。除非我已设置默认附件,以防用户选择不上传。