Handling File Uploads in Ruby on Rails
Uploading files is a common requirement in web applications, and Ruby on Rails (RoR) makes it easy to implement this functionality. This article will guide you through the process of handling file uploads in Ruby on Rails.
The Basics
First, let’s start by creating a new Rails application or navigating to your existing one. Once you are in the project directory, open the terminal and run the following command:
$ rails generate scaffold Upload name:string attachment:file
$ rake db:migrate
The above commands will generate a model called “Upload” with two attributes: “name” (a string) and “attachment” (a file). The rails generate scaffold command also generates the respective controllers and views for CRUD operations on the ”Upload” model.
View: Uploading a File
Next, let’s create a form where users can upload their files. Open the file “app/views/uploads/new.html.erb” and replace its contents with the following code:
<%= form_with(model: @upload, local: true) do |form| %>
<%= form.label :name %>:
<%= form.text_field :name %>
<%= form.label :attachment %>:
<%= form.file_field :attachment %>
<%= form.submit %>
<% end %>
In the code snippet above, we use the form_with helper to create a form for the “Upload” model. Inside the form, we have two fields: one for the “name” attribute and another for the ”attachment” attribute. The form.file_field method allows users to select a file for upload.
Controller: Handling the Upload
Now, let’s move on to the controller to handle the file upload. Open the file “app/controllers/uploads_controller.rb” and add the following code to the “create” method:
uploaded_file = params[:upload][:attachment]
File.open(Rails.root.join(“public”, “uploads”, uploaded_file.original_filename), ”wb”) do |file|
file.write(uploaded_file.read)
end
In the code snippet above, we access the uploaded file using params[:upload][:attachment]. We then open the file in write binary mode and save it to the “public/uploads” directory. Note that you may need to create the “uploads” directory manually in the “public” folder.
Showing the Uploaded File
Finally, let’s update the “show” view to display the uploaded file. Open the file “app/views/uploads/show.html.erb” and replace its contents with the following code:
Name: <%= @upload.name %>
Attachment:
<%= image_tag("/uploads/" + @upload.attachment.original_filename) %>
In the code snippet above, we use the image_tag helper to display the uploaded file as an image. The path to the file is constructed by concatenating “/uploads/” with the original filename of the uploaded file.
Conclusion
With the steps outlined above, you can easily handle file uploads in Ruby on Rails. Remember to handle any additional validation or security considerations as per your application’s requirements. Good luck with your file upload feature!
Leave a Reply