In this post, I’ll show you how to upload files, such as images, Word docs, and PDFs, to your Rails app. It’s super easy! To keep the example easy to understand, let’s use the tried-and-true method of adding an Image to a Post. Feel free to substitute your own resources for Image and Post, because the process will basically be the same across the board.
2. Then run
3. In your Post model (post.rb) and add
has_one_attached, like so:
class Post < ApplicationRecord has_one_attached :image end
4. Then, inside posts_controller.rb, you’d add
:image to the
class PostsController < ApplicationController # ...other methods... private def post_params params.require(:post).permit(:title, :body, :image) # allow users to upload multiple by using `images: ` end end
5. Add the upload fields to the Post’s _form.html.erb view.
<!-- Upload only one file --> <div> <%= form.label :image %> <%= form.file_field :image %> </div> <!-- Upload multiple files --> <div> <%= form.label :images %> <%= form.file_field :images, multiple: true %> </div>
6. Now let’s show the files you uploaded inside show.html.erb.
<!-- Show a single image --> <%= image_tag @post.header_image %> <!-- List the names of multiple images --> <% @post.images.each do |image| %> <%= image.blob.filename %> <% end %> <!-- Link to multiple attachments (great for PDFs!) --> <% @post.files.each do |file| %> <%= link_to file.blob.filename, file %> <% end %>
Next steps. For production, you’ll want to configure ActiveStorage to work with something like AWS or DigitalOcean. This isn’t too hard – you’ll just need to provide your information in a configuration file. You can learn more around 3:00 in this great video from GoRails.