Carrierwave - невозможно получить доступ к model.id во время обработки - PullRequest
0 голосов
/ 06 июля 2019

Я загружаю PDF и хочу разделить страницы на отдельные изображения. Моя проблема в том, что обработка происходит до сохранения оригинального pdf, поэтому model.id имеет значение null. Мне нужен model.id, чтобы я мог отслеживать файлы изображений и сохранять их в нужной папке.

class PdfPackageUploader < CarrierWave::Uploader::Base

include CarrierWave::MiniMagick

storage :file

def store_dir
"uploads/#{model.class.to_s.underscore}/#{model.id}"
end

version :jpg do
  process :convert_to_images
  process :set_content_type_jpg
end

def convert_to_images(*args)
  image = MiniMagick::Image.open(current_path)
  image.pages.each_with_index do |page, index|
    MiniMagick::Tool::Convert.new do |convert|
      convert.background 'white'
      convert.flatten
      convert.density 200
      convert.quality 80
      convert << page.path
      convert << "#{CarrierWave.root}/#{store_dir}/#{model.id}image-#{index}.jpg"
      @sheet = Sheet.create()
      @sheet.package_id = model.id
      @sheet.save
    end
  end
end

def set_content_type_jpg(*args)
  self.file.instance_variable_set(:@content_type, "image/jpg")
end

def extension_white_list
  %w(jpg jpeg gif png doc docx pdf)
end
...