2012-03-02 2 views
0

Я использую Rails 3 и драгоценный камень несущей.изображения кэша несущей волны и activerecord

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

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

Поскольку форма имеет много шагов, я хочу сохранить временные изображения с параметром cache в CarrierWave. то на последнем шаге я хочу восстановить изображения и загрузить мой продукт. Поэтому я создаю модель под названием TempData, которая сохраняет временные данные (в этом случае cache_name), type_identifier и mark 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 

модель Image

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

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

CarrierWave with ActiveResource

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

Смежные вопросы