Bird
Raised Fist0
Ruby on Railsframework~20 mins

File uploads with Active Storage in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Active Storage Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when you attach a file using Active Storage?
Consider a Rails model User with has_one_attached :avatar. What is the behavior after running user.avatar.attach(io: File.open('path/to/file.jpg'), filename: 'file.jpg') and saving the user?
AThe file is uploaded but not linked to the user until the user is reloaded.
BThe file is only linked in the database but not saved anywhere.
CThe file is saved in the database as binary data inside the user record.
DThe file is uploaded and linked to the user. The file is stored in the configured service (local or cloud).
Attempts:
2 left
💡 Hint
Think about how Active Storage separates file data from model data.
📝 Syntax
intermediate
2:00remaining
Which code correctly attaches multiple files to a model using Active Storage?
Given a model Post with has_many_attached :images, which option correctly attaches two image files to a post?
Apost.images.attach([{io: File.open('img1.jpg'), filename: 'img1.jpg'}, {io: File.open('img2.jpg'), filename: 'img2.jpg'}])
Bpost.images.attach([io: File.open('img1.jpg'), filename: 'img1.jpg'], [io: File.open('img2.jpg'), filename: 'img2.jpg'])
Cpost.images.attach(io: File.open('img1.jpg'), filename: 'img1.jpg'); post.images.attach(io: File.open('img2.jpg'), filename: 'img2.jpg')
Dpost.images.attach('img1.jpg', 'img2.jpg')
Attempts:
2 left
💡 Hint
Check the syntax for attaching multiple files as an array of hashes.
🔧 Debug
advanced
2:00remaining
Why does this Active Storage file upload raise an error?
Given the code snippet:
user.avatar.attach(io: 'path/to/file.jpg', filename: 'file.jpg')

What error will this cause and why?
Ruby on Rails
user.avatar.attach(io: 'path/to/file.jpg', filename: 'file.jpg')
ANo error; the file uploads successfully.
BArgumentError because filename is missing.
CTypeError because <code>io</code> expects an IO-like object, not a string.
DRuntimeError because the file path does not exist.
Attempts:
2 left
💡 Hint
Check the type expected for the io parameter.
❓ state_output
advanced
2:00remaining
What is the value of user.avatar.attached? after attaching and saving?
Given a User model with has_one_attached :avatar, after running:
user.avatar.attach(io: File.open('avatar.png'), filename: 'avatar.png')
user.save

What does user.avatar.attached? return?
Atrue
Bfalse
Cnil
DRaises NoMethodError
Attempts:
2 left
💡 Hint
Check the method that tells if a file is attached.
🧠 Conceptual
expert
3:00remaining
How does Active Storage handle file deletion when a model is destroyed?
When a model with attached files is destroyed, what happens to the files stored by Active Storage?
AActive Storage marks files as deleted but does not remove them immediately.
BActive Storage automatically deletes the attached files from storage when the model is destroyed.
CFiles are deleted only if <code>dependent: :destroy</code> is set on the attachment.
DThe attached files remain in storage and must be deleted manually.
Attempts:
2 left
💡 Hint
Think about how Active Storage manages cleanup of attachments.

Practice

(1/5)
1. What is the purpose of has_one_attached in a Rails model when using Active Storage?
easy
A. To link a single uploaded file to a model instance
B. To create a database table for storing files
C. To validate the file type before upload
D. To automatically resize uploaded images

Solution

  1. Step 1: Understand Active Storage attachment macros

    The has_one_attached macro in a Rails model declares a one-to-one association between the model and a single uploaded file.
  2. Step 2: Differentiate from other options

    It does not create tables, validate file types, or resize images by itself; those are handled elsewhere.
  3. Final Answer:

    To link a single uploaded file to a model instance -> Option A
  4. Quick Check:

    has_one_attached = single file link [OK]
Hint: Remember: has_one_attached means one file per model [OK]
Common Mistakes:
  • Confusing has_one_attached with database table creation
  • Thinking it validates or processes files automatically
  • Mixing it up with has_many_attached for multiple files
2. Which of the following is the correct way to add a file input field in a Rails form for uploading a file with Active Storage?
easy
A. <%= form.file_field :avatar %>
B. <%= form.text_field :avatar %>
C. <%= form.submit :avatar %>
D. <%= form.select :avatar %>

Solution

  1. Step 1: Identify the correct form helper for file uploads

    The file_field helper creates a file input allowing users to select files for upload.
  2. Step 2: Exclude other input types

    Text fields, submit buttons, and select dropdowns do not allow file selection.
  3. Final Answer:

    <%= form.file_field :avatar %> -> Option A
  4. Quick Check:

    file_field = file input [OK]
Hint: Use file_field for file inputs in forms [OK]
Common Mistakes:
  • Using text_field instead of file_field for uploads
  • Confusing submit button with file input
  • Using select dropdown for file selection
3. Given the following model and form code, what will be the result after submitting a file?
class User < ApplicationRecord
  has_one_attached :profile_pic
end

# In the form view:
<%= form_with model: @user do |form| %>
  <%= form.file_field :profile_pic %>
  <%= form.submit %>
<% end %>
medium
A. The file will be ignored because has_one_attached is missing
B. The uploaded file will be attached to the user's profile_pic
C. The form will raise a syntax error due to missing multipart option
D. The file will be saved as a string in the profile_pic column

Solution

  1. Step 1: Check model attachment declaration

    The model uses has_one_attached :profile_pic, so it can attach one file to the user.
  2. Step 2: Understand form_with default behavior

    Rails 6+ automatically sets multipart for file uploads in form_with, so the file will be sent correctly.
  3. Final Answer:

    The uploaded file will be attached to the user's profile_pic -> Option B
  4. Quick Check:

    has_one_attached + file_field = file attached [OK]
Hint: form_with sets multipart automatically for file_field [OK]
Common Mistakes:
  • Assuming file is saved as string in DB column
  • Thinking multipart option must be manually added
  • Believing file is ignored without extra code
4. Identify the error in this code snippet for attaching multiple files using Active Storage:
class Product < ApplicationRecord
  has_one_attached :images
end

# In the form:
<%= form.file_field :images, multiple: true %>
medium
A. The model should not declare any attachment for multiple files
B. file_field does not support the multiple option
C. The form must use text_field instead of file_field
D. has_one_attached should be has_many_attached for multiple files

Solution

  1. Step 1: Check model attachment type

    The model uses has_one_attached, which supports only one file, but the form allows multiple files.
  2. Step 2: Correct attachment macro for multiple files

    To attach multiple files, the model must use has_many_attached.
  3. Final Answer:

    has_one_attached should be has_many_attached for multiple files -> Option D
  4. Quick Check:

    Multiple files need has_many_attached [OK]
Hint: Use has_many_attached for multiple file uploads [OK]
Common Mistakes:
  • Using has_one_attached with multiple: true
  • Thinking file_field can't handle multiple files
  • Not declaring attachment in model for uploads
5. You want to allow users to upload multiple images for a gallery and display thumbnails after upload. Which combination of model and view code correctly implements this with Active Storage?
hard
A. Model: has_many_attached :photos
View: form.text_field :photos
B. Model: has_one_attached :photos
View: form.file_field :photos
C. Model: has_many_attached :photos
View: form.file_field :photos, multiple: true
D. Model: has_one_attached :photos
View: form.file_field :photos, multiple: true

Solution

  1. Step 1: Choose correct model attachment for multiple files

    To attach multiple images, use has_many_attached :photos in the model.
  2. Step 2: Use file_field with multiple option in the form

    The form must use file_field :photos, multiple: true to allow selecting multiple files.
  3. Step 3: Display thumbnails after upload

    With this setup, you can iterate over @model.photos to show thumbnails.
  4. Final Answer:

    Model: has_many_attached :photos and View: form.file_field :photos, multiple: true -> Option C
  5. Quick Check:

    Multiple files need has_many_attached + multiple: true [OK]
Hint: Multiple files = has_many_attached + file_field multiple: true [OK]
Common Mistakes:
  • Using has_one_attached for multiple files
  • Omitting multiple: true in file_field
  • Using text_field instead of file_field for uploads
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard