Paperclip会在销毁时触发验证错误

时间:2017-06-12 18:56:33

标签: ruby-on-rails paperclip

我的Paperclip模型中有这个功能:

def ratiocorrect
    ratio = Paperclip::Geometry.from_file(image.queued_for_write[:original].path).width / Paperclip::Geometry.from_file(image.queued_for_write[:original].path).height
    if ratio < 1.499 or ratio > 1.501
      errors.add(:image,'ratio should be 4:3')
    end
  end

在保存之前检查图像的比例是否为3:2。

我用以下方式强制执行:

validate :ratiocorrect

它完美无瑕。

虽然当我想要销毁图像时,我会收到以下错误:

undefined method `path' for nil:NilClass
ratio = Paperclip::Geometry.from_file(image.queued_for_write[:original].path).width / Paperclip::Geometry.from_file(image.queued_for_write[:original].path).height

它似乎再次检查queued_for_write图像,因为没有任何用于销毁操作。

是否可以仅在创建或更新时进行验证,而不是销毁?

1 个答案:

答案 0 :(得分:1)

是的,在您的自定义验证中使用:create和/或:update选项。

你会做这样的事情:

validate :ratiocorrect, on: :create
  

默认情况下,每次调用有效时都会运行此类验证吗?或保存对象。但是也可以通过为validate方法提供:on选项来控制何时运行这些自定义验证,使用:: create或:update。

查看Custom Methods了解更多信息。