我正在使用Rails 3和carrierwave gem。
我的问题是下一个:
我正在编写一个包含多个模型和关系的向导表单。所以我的应用程序的产品通过Image模型有许多图像(它已经与载波一起安装)。
因为表单有很多步骤,我想暂时保存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
那我如何使用模型和挂载信息保存/缓存图像?如何检索缓存并使用缓存中的图像加载我的产品?
提前致谢。对不起我的英文,如果您需要更多信息,请评论这篇文章。
答案 0 :(得分:1)
查看下一个链接:
CarrierWave with ActiveResource
我还创建了一个存储时态数据的模型。这里我保存了carrierwave的cache_name。当我保存产品标记时,这些寄存器为can_be_deleted。然后我编写了一个删除这些寄存器并清理Carrierwave缓存文件的任务。