Paperclip具有验证方法,用于验证文件的存在,大小和内容类型。但有没有办法在保存记录之前验证文件的内容?
我尝试执行validate :my_method
并在[attachment].path
中打开my_method
中的文件,但当然失败了因为附件尚未移动到文件系统中的最终安放位置保存记录之前。
编写自定义Paperclip后处理器似乎是一个选项,因为它可以在保存记录之前访问属于附件的File对象,但是失败的处理器在保存之前不会使记录无效。
这样做有好办法吗?我怎样才能确保我的应用程序中只有符合要求的文件? (如果文件无效,我还可以使用其他优先删除整个记录的回调吗?)
编辑:哦。特别是,从after_save回调中提升ActiveRecord :: Rollback会做些什么吗?答案 0 :(得分:8)
啊,但是在保存记录之前,可以从验证程序访问File对象,方法是调用[attachment].to_file
。在[attachment].to_file.path
中针对attachment.path
(而不是my_method
)运行我的解析器似乎工作正常。
每{{}}},[attachment].queued_for_write[:original].path
也可能是一种选择。
答案 1 :(得分:1)
很好的问题,或许有经验的人可以给你一个更好的答案,但鉴于在Paperclip提供的DSL中似乎没有办法做到这一点,我建议你自己建立一个Paperclip 验证器(不是后处理器)。
您可以使用an existing validator作为示例,并将其放入app/lib/paperclip/matchers/validate_foobar.rb
(确保将config/application.rb
设置为从lib
文件夹加载),然后您就可以了很高兴。