how to upload multiple images with file_column + rmagick

how to upload multiple images with file_column + rmagick in one form?

I have done this before using file_column, but have since switched to attachment_fu. The process should be about the same though. First off, these links will probably help alot.

http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/ http://www.silverscripting.com/blog/2007/12/18/multiple-file-upload-with-rails-file_column-plugin-and-mootools/

They both deal with mootools, to make multiple image uploads a bit snazzier rather than limiting to so many files per form (or littering your page with a mess of file fields). If you don't want to use the snazzy javascripts, then just create your fields and name them something like 'attachments' so that the files get pushed into an array that rails can use like 'params[:attachments]'

As for the controller, mine looks like this (again I'm using attachment_fu, but it should be identical)

  def create     @picture = @item.pictures.build(params[:picture])     @pictures = @item.pictures.find(:all)

    unsaved_pictures =     saved_pictures =     params[:attachments] ||=     params[:attachments].each do |file|       @picture = @item.pictures.build({:uploaded_data => file}) unless file == ""       unsaved_pictures << @picture.filename unless @picture.save       saved_pictures << @picture.filename if @picture.save     end

    if saved_pictures.blank?       flash[:error] = "No Pictures were added."     else       if saved_pictures.size < 2         flash[:notice] = "Picture was successfully added. (#{saved_pictures[0]})"       else         flash[:notice] = "Pictures were successfully added. (#{saved_pictures.join(', ')})"       end     end

    unless unsaved_pictures.blank?       if unsaved_pictures.size < 2         flash[:error] = "File was not added. (#{unsaved_pictures[0]})"       else         flash[:error] = "Files were not added. (#{unsaved_pictures.join(', ')})"       end     end

    respond_to do |format|       format.html { redirect_to(item_pictures_url) }     end   end

The first to lines should be familiar, then I create empty arrays, saved_pictures and unsaved_pictures so that I can report stuff back to the user later. Then I iterate through the attachments making sure the file field wasn't empty ( I probably should have used file.empty? instead of file == "" there). If the picture wasn't saved I store the name into my unsaved_pictures array, if it was I store the filename in saved_puctures array. Then I just use flash to send out notices and errors depending on what was/wasn't saved and proper pluralization.

Hope this helps get you going in the right direction.

On a side note if anyone has any suggestions on where I can make this code better, please do tell me :smiley: The method is a bit beefy and there are singular/plural flash notices doesn't seem to dry.

Also has anyone used Paperclip for file attachments yet? If so, how is it?