validates_attachment表示可选字段

时间:2014-06-04 06:12:04

标签: ruby-on-rails paperclip-validation

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

validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes }

当有附件时,它会起作用,但当它留空时会失败。如何确保只在附加文件时验证?

不幸的是,here提到的解决方案无效。

2 个答案:

答案 0 :(得分:2)

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

-

<强> if:

Using if: in your validation基本上允许您确定验证器将触发的条件。我从链接中看到,这些人正在使用if: :avatar_changed?

您可能遇到的问题是,您可以使用Procinstance 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对象是否存在,为验证提供truefalse

答案 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)$/ }

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