Rails - Paperclip在不应该的时候验证附件大小?

时间:2010-01-11 21:52:25

标签: ruby-on-rails ruby activerecord ruby-on-rails-plugins paperclip

我有一个使用Paperclip的轨道模型,如下所示:

  has_attached_file :image, :styles => { :normal => ['857x392#', :png] },
                    :url => '/assets/pages/:id/:basename.:extension',
                    :path => ':rails_root/public/assets/pages/:id/:basename.:extension'

  validates_attachment_size :image, :less_than => 2.megabytes

尝试创建此模型的记录而没有要上载的附件时,将返回验证错误:

  

以下有问题   字段:

* Image file size file size must be between 0 and 2097152 bytes.

我尝试过两者:allow_blank => true和:allow_nil =>在模型中的验证语句之后为true,但两者都没有。

如何允许:image参数为空?

4 个答案:

答案 0 :(得分:10)

  

validates_attachment_size:image,:in => 0.megabytes..2.megabytes

立即行动

答案 1 :(得分:6)

validates_attachment_size :image, :less_than => 25.megabytes, 
                          :unless => Proc.new {|m| m[:image].nil?}

非常适合我

答案 2 :(得分:1)

Paperclip的验证仅检查范围,而不关心:allow_nil => true

您可以尝试设置:min => nil:min => -1,也许这样可行。

<强>更新 这在最新版本的Paperclip中不起作用,因为它们改变了验证的工作方式。 您可以尝试的是:

validates_attachment_size :image, :less_than => 2.megabytes, 
   :unless => Proc.new {|model| model.image }

答案 3 :(得分:0)

尝试以下代码。

validate :image_present

def image_present
  if image.present? && image_file_size < 2.megabytes
    errors.add(:file_size, "file size must be between 0 and 2 megabytes.")
  end
end