我正在努力从attachment_fu升级到carrierwave,因为attachment_fu在rails 3中已损坏。

所有测试都无法运行,因为我们有无效的灯具,这些灯具正在使用attachment_fu的语法作为附件文件。

例如,我们有一个具有一个PostAttachment的Post模型。以下是PostAttachment固定装置中的数据:

a_image:
  post_id: 1
  attachment_file: <%= Rails.root>/test/files/test.png


这是我得到的错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  column "attachment_file" of relation "post_attachments" does not exist
LINE 1: INSERT INTO "post_attachments" ("post_id", "attachment_file"...


attachment_file将由attachment_fu接收,并且将处理所有创建模型的attachment_fu附件的过程。

有没有办法在固定装置中包含图像附件,而是使用CarrierWave?

最佳答案

我设法使它起作用的唯一方法是使用专门用于测试的存储提供程序,而该存储提供程序实际上并未保存/读取文件。

在您的config/initializers/carrier_wave.rb中,添加一个NullStorage类,该类实现了存储提供程序的最小接口。

# NullStorage provider for CarrierWave for use in tests.  Doesn't actually
# upload or store files but allows test to pass as if files were stored and
# the use of fixtures.
class NullStorage
  attr_reader :uploader

  def initialize(uploader)
    @uploader = uploader
  end

  def identifier
    uploader.filename
  end

  def store!(_file)
    true
  end

  def retrieve!(_identifier)
    true
  end
end


然后,在初始化CarrierWave时,为测试环境添加一个子句,例如,

if Rails.env.test?
    config.storage NullStorage
end


这是gist of my complete carrier_wave.rb供参考。它还包括如何设置S3以在登台/生产环境中上载以及在本地存储中进行开发,以便您可以了解如何在上下文中配置CarrierWave。

一旦配置了CarrierWave,您只需在夹具列中输入任何字符串即可模拟上传的文件。

关于ruby-on-rails - Rails 3带有载波的测试夹具?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7534341/

10-13 02:10