образы кеша и активные записи - PullRequest
0 голосов
/ 02 марта 2012

Я использую Rails 3 и самообладатель carrierwave.

Моя проблема заключается в следующем:

Я кодирую форму мастера с несколькими моделями и связями.Таким образом, у моего приложения есть продукты, которые имеют много изображений через модель изображения (оно было смонтировано с carrierwave).

Поскольку в форме много шагов, я хочу временно сохранить изображения с опцией кэширования в CarrierWave.тогда я сделаю последний шаг, я хочу восстановить изображения и загрузить мой продукт.Поэтому я создаю модель с именем TempData, которая временно сохраняет данные (в данном случае cache_name), type_identifier и метку can_be_deleted.

Например, это мои модели:

Модель продукта:

class Product < ActiveRecord::Base
  has_many :images, :as => :imageable, :dependent => :destroy
  def save_images_in_temporal_folder(images_attributes)
    begin
      uploader = ImageUploader.new
      images_attributes.to_hash.each do |image|
        uploader.cache!(image[1]['filename'])
        TempData.create(:data => uploader.cache_name, :can_deleted => false, :type_name => TempDataType.product_image_upload_to_words)
      end
    rescue

    end
  end

  def load_images_from_temporal_folder
    begin
      uploader = ImageUploader.new
      tmp_images = []
      TempData.find_all_by_can_deleted_and_type_name(false, TempDataType.product_image_upload_to_words).map(&:data).each do |cache_name|
        tmp_images << uploader.retrieve_from_cache!(cache_name)
      end
      tmp_images
    rescue

    end
  end
end

Модель изображения

class Image < ActiveRecord::Base
    attr_accessible :imageable_type, :imageable_id, :filename

    belongs_to :imageable, :polymorphic => true
    mount_uploader :filename, ImageUploader

    #validates :filename, :presence => true
end

Мой ImageUploader:

class ImageUploader < CarrierWave::Uploader::Base
  configure do |config|
    config.remove_previously_stored_files_after_update = false
  end

  include CarrierWave::RMagick

  storage :file

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

  def self.store_dir_for_file(model, mounted, filename, version = "")
    filename = "#{version}_#{filename}" unless version.blank?
    "uploads/#{model.class.to_s.underscore}/#{mounted}/#{model.id}/#{filename}"
  end

  process :resize_to_limit => [200, 300]

  version :thumb do
    process :resize_to_limit => [50, 50]
  end

  version :big do
    process :resize_to_limit => [400, 400]
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end

end

Так как ясохранить / кэшировать изображения с информацией о модели и монтировании?Как получить кеш и загрузить мой продукт с изображениями в кеше?

Заранее спасибо.Извините за мой английский, и если вам нужна дополнительная информация, прокомментируйте этот пост.

1 Ответ

1 голос
/ 07 марта 2012

Просмотреть следующую ссылку:

CarrierWave с ActiveResource

Также я создаю модель, которая хранит временные данные. Здесь я сохраняю кеш-имя оператора. Когда я сохраняю товар, отметьте их как can_be_deleted. Затем я пишу задачу, которая удаляет эти регистры и очищает файлы кэша Carrierwave.

...