【问题标题】:Using factory_girl with PaperClip 4.0将 factory_girl 与 PaperClip 4.0 一起使用
【发布时间】:2014-02-03 22:29:40
【问题描述】:

有谁知道绕过任何 PaperClip 处理和验证,使用 factory_girl 创建 PaperClip 4.0 附件的正确方法?

我以前在我的工厂只能做以下事情:

factory :attachment do
  supporting_documentation_file_name { 'test.pdf' }
  supporting_documentation_content_type { 'application/pdf' }
  supporting_documentation_file_size { 1024 }
  # ...
end

这基本上会诱使 PaperClip 认为有一个有效的附件。

从 3.5.3 升级到 4.0 后,我现在收到验证错误:

ActiveRecord::RecordInvalid: Validation failed: Image translation missing: en.activerecord.errors.models.attachment.attributes.supporting_documentation.spoofed_media_type

注意:PaperClip 3.X 的原始讨论在这里:How Do I Use Factory Girl To Generate A Paperclip Attachment?

【问题讨论】:

标签: ruby-on-rails paperclip factory-bot


【解决方案1】:

问题似乎是由line 61 in media_type_spoof_detector 引起的。

Paperclip 正在尝试查找您上传的“文件”的 MIME 类型。如果没有,则无法通过验证来保护您免受文件类型欺骗。

我自己没有尝试过,但最好的办法是使用真实文件,并使用来自ActionDispatch::TestProcessfixture_file_upload 方法设置它。

factory :attachment do
   supporting_documentation { fixture_file_upload 'test.pdf', 'application/pdf' }

   # This is to prevent Errno::EMFILE: Too many open files
   after_create do |attachment, proxy|
     proxy.supporting_documentation.close
   end
end

您需要在test_helper.rb 中包含ActionDispatch::TestProcess

这是第一次发布here

【讨论】:

  • 嗯,pivotallabs.com/… 还适用吗?
  • 我相信这是 after_create 钩子的原因,它正确地关闭了临时文件?不过我可能错了……
  • 你能解释一下 after_create 钩子是如何工作的吗?我很难让它发挥作用。 proxy 应该是什么?当我运行测试时,proxy 为零。
  • after_create 应该在 FactoryGirl 创建模型后运行。第二个参数应该是 FactoryGirl 用来创建模型的对象。有关详细信息,请参阅rubydoc.info/gems/factory_girl/file/… 的“has_many”部分。
猜你喜欢
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2011-12-24
  • 2014-03-10
相关资源
最近更新 更多