I recently switched to CarrierWave: "Classier solution for file uploads in Ruby for Rack, Rails, Merb and Sinatra". Why? Here's three reasons:
- Uploading logic/handling is extracted into a separate class. Hence the tag "Classier solution". It addresses my sensibility for Single Responsibility and separation of concerns.
- It maintains a cache across redisplays. Meaning the user does not need to upload a file again, if other fields are invalid on the model.
- Dead easy upload from a remote URL.
Definitley give it a try. Anything I have missed? Let me know in the comments.