ActiveStorage: How to copy / clone an attachment from one record to another

Posted . Visible to the public.

Given there is a user with an attachable avatar:

class User < ApplicationRecord
  has_one_attached :avatar
end

You can copy the avatar from one user to another user with the code below:

user_1 = User.first
user_2 = User.create!(
  avatar: {
    io: StringIO.new(user_1.avatar.download),
    filename: user_1.avatar.blob.filename.to_s,
    content_type: user_1.avatar.blob.content_type.to_s,
  }
)

Note: For large attachments you might need to use a different approach to avoid memory issues.

Last edit
Emanuel
License
Source code in this card is licensed under the MIT License.
Posted by Emanuel to makandra dev (2025-02-24 12:00)