我有一个带回形针的rails 3应用程序。如果附件是图像,并且图像宽度或高度低于100,我想跳过保存。
我在模型中有以下内容:
validate :file_dimensions, :unless => "errors.any?"
def file_dimensions
dimensions = Paperclip::Geometry.from_file(attachment.to_file(:original))
if dimensions.width < 100 || dimensions.height < 100
errors.add(:file,'Width or height must be at least 100px')
end
end
问题是我不想引发错误,因为整个作业都失败了,我只想让回形针跳过该附件而不是停止整个过程。
答案 0 :(得分:1)
您声称自己不想提出错误以便保存。在这种情况下,只需使用:before_validate
回调:
before_validate :check_file_dimensions
def check_file_dimensions
if attachment.dirty?
dimensions = Paperclip::Geometry.from_file(attachment.to_file(:original))
if dimensions.width < 100 || dimensions.height < 100
attachment.clear
end
end
end
当然,如果您想向用户显示错误消息,您需要在实例var或其他内容中传递它(显然您不能使用错误或无法保存)。
attachment.dirty?上面的行是一个小的增强功能,因此您不必在每次保存模型时不断检查附件,而只在上载新附件时。如果您在S3上存储文件,这一点尤为重要。
答案 1 :(得分:0)
你为什么不想保存它?如果你希望它继续下去,那么一个简单的解决方案就是不进行验证,但可以像before_save,before_create或after_save回调一样进行验证。
最简单的事情可能是在before_save中,如果它没有通过测试,只需删除它,然后保存。
答案 2 :(得分:0)
您可以从ActiveRecord::RecordInvalid