1

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

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

这在有附件时有效,但当它为空时失败。我如何确保它仅在有附件时才有效?

不幸的是,这里提到的解决方案不起作用。

4

2 回答 2

2

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

--

if:

if:在您的验证中使用基本上可以让您确定验证器将触发的条件。我从链接中看到,伙计们正在使用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验证

于 2014-06-04T06:25:09.427 回答
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)$/ }

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

于 2014-06-04T06:23:54.313 回答