Ruby on Rails File Uploads Single file upload using Carrierwave


Start using File Uploads in Rails is quite simple, first thing you have to do is to choice plugin for managing uploads. The most common onces are Carrierwave and Paperclip. Both are similar in functionality and rich in documentation on

Let's have an look on example with simple avatar upload image with Carrierwave

After bundle install Carrierwave, type in console

$ rails generate uploader ProfileUploader

This will create an config file located at /app/uploaders/profile_uploader.rb

Here you can set up storage (i.e local or cloud), apply extensions for image manipulations (i.e. generting thumbs via MiniMagick) and set server-side extension white list

Next, create new migration with string tipe for user_pic and mount uploader for it in user.rb model.

mount_uploader :user_pic, ProfileUploader

Next, display an form to upload avatar (may be an edit view for the user)

<% form_for @user, html: { multipart: true } do |f| %>
    <%= f.file_field :user_pic, accept: 'image/png, image/jpg' %>
    <%= f.submit "update profile pic", class: "btn" %>
<% end %>

Make sure to include { multipart: true } in order form can process uploads. Accept is an optional to set client-side extension white-list.

To display an avatar, simply do

<%= image_tag @user.user_pic.url %>