使用Paperclip gem验证上传时的附件内容

时间:2011-08-12 18:26:40

标签: ruby-on-rails paperclip

Paperclip具有验证方法,用于验证文件的存在,大小和内容类型。但有没有办法在保存记录之前验证文件的内容

我尝试执行validate :my_method并在[attachment].path中打开my_method中的文件,但当然失败了因为附件尚未移动到文件系统中的最终安放位置保存记录之前。

编写自定义Paperclip后处理器似乎是一个选项,因为它可以在保存记录之前访问属于附件的File对象,但是失败的处理器在保存之前不会使记录无效。

这样做有好办法吗?我怎样才能确保我的应用程序中只有符合要求的文件? (如果文件无效,我还可以使用其他优先删除整个记录的回调吗?)

编辑:哦。特别是,从after_save回调中提升ActiveRecord :: Rollback会做些什么吗?

2 个答案:

答案 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文件夹加载),然后您就可以了很高兴。