我的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
图像,因为没有任何用于销毁操作。
是否可以仅在创建或更新时进行验证,而不是销毁?
答案 0 :(得分:1)
是的,在您的自定义验证中使用:create
和/或:update
选项。
你会做这样的事情:
validate :ratiocorrect, on: :create
默认情况下,每次调用有效时都会运行此类验证吗?或保存对象。但是也可以通过为validate方法提供:on选项来控制何时运行这些自定义验证,使用:: create或:update。
查看Custom Methods了解更多信息。