哎呀,这不是一个令人愉快的问题。我能想到的最简单的方法是在您的迁移中添加一些代码,这些代码实际上通过附件“上传”所有文件,因此让插件创建 ID 并放置文件。
像这样的东西:
Dir.glob("/images/to/import/*.{jpg,png,gif}").each do |path|
# simulate uploading the image
tempfile = Tempfile.new(path)
tempfile.set_encoding(Encoding::BINARY) if tempfile.respond_to?(:set_encoding)
tempfile.binmode
FileUtils.copy_file(path, tempfile.path)
# create as you do in the controller - may need other metadata here
image = Image.create({:uploaded_data => tempfile})
unless image.save
logger.info "Failed to save image #{path} in migration: #{image.errors.full_messages}"
end
tempfile.close!
end
看看attachment-fu 的测试可能会有用。