我正在努力从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/