J’adore utiliser attachment fu pour gérer mes images. Cependant, je déteste (ainsi que mes clients) charger les images une à une dans mes galleries. Une solution simple et efficace est d’uploader toutes les images compressées dans un fichier zip.
Premièrement, il faut installer rubyzip :
gem install rubyzip
Pas trop difficile jusque là. Vous aurez évidemment besoin de attachment_fu.
script/plugin install http://svn.techno-weenie.net/projects/plugins/attachment_fu/
ou
piston import install http://svn.techno-weenie.net/projects/plugins/attachment_fu/ vendor/
Il ne vous reste plus qu’à ajouter un petit bout de code dans votre contrôlleur:
1 class AssetsController < ApplicationController 2 def create 3 4 Zip::ZipFile.foreach(params[:asset][:uploaded_data].path) do |zip_entry| 5 if zip_entry.file? 6 ActionController::UploadedTempfile.open(zip_entry.to_s) do |temp| 7 zip_entry.extract(temp.path){true} 8 temp.original_path = zip_entry.to_s 9 temp.content_type = 'image/jpeg' # Juste pour que ça passe dans 10 # attachment_fu 11 @training_slot.assets.create!(:uploaded_data=>temp) 12 end 13 end 14 end 15 16 flash[:notice] = 'Les images ont été ajoutées correctement.' 17 redirect_to ... 18 19 rescue ActiveRecord::ActiveRecordError => e 20 flash[:notice] = 'Une erreur s\'est produite : ' + e 21 redirect_to ... 22 end
Et n’oublliez pas d’importer la librairie dans environnement.rb
require 'zip/zip'
Voilà, c’est tout. En espérant que ça puisse vous éviter le pénible remplissage de galleries. :)