我有一个使用paperclip的Rails 3应用程序。 我想要防止宽度/高度LTE 50x50的图像被paperclip保存。
这个可能吗?
我有一个使用paperclip的Rails 3应用程序。 我想要防止宽度/高度LTE 50x50的图像被paperclip保存。
这个可能吗?
没错!这里是我为我的应用程序编写的自定义验证,它可以直接在您的应用程序中使用,只需将像素设置为您想要的任何值即可。
def file_dimensions
dimensions = Paperclip::Geometry.from_file(file.queued_for_write[:original].path)
self.width = dimensions.width
self.height = dimensions.height
if dimensions.width < 50 && dimensions.height < 50
errors.add(:file,'Width or height must be at least 50px')
end
end
需要注意的是,我使用了 self.width=
和 self.height=
来保存图像的尺寸到数据库中。如果您不关心存储图像的尺寸,则可以将它们省略。
检查宽度和高度意味着只需要其中一个大于50px即可。如果要确保两者都大于50,具有讽刺意味的是,您需要检查宽度或高度。对我来说,在这种情况下,一者为与操作,二者为或操作似乎很奇怪。
唯一需要注意的其他地方是,您需要在最后运行此验证:如果模型上已经存在其他错误,它将引发异常。老实说,我已经有一段时间没有记起错误消息是什么了,但在您的验证逻辑中,请使用以下内容:
validate :file_dimensions, :unless => "errors.any?"
那应该就搞定了!
to_file
已被弃用并移除。现在正确的方法是使用file.queued_for_write[:original]
。https://github.com/thoughtbot/paperclip/issues/812 - Calvin