The two option I would look into are using a gem called Paperclip, which provides the tools for uploads, url generation, and attachments as model attributes with any number of storage options, and using a service like Cloudinary. Cloudinary does the same things as paperclip, but is the hosting service for the uploads as well, which with images means they can do a bunch of cool stuff like color, size, and shape transformation on the fly. Cloudinary is a little more expensive though, so it's common for people to start with Paperclip and migrate to Cloudinary when the app grows.