ActiveStorage::Blob#compose Now Supports Custom Blob Key in Rails 7.2.

The ActiveStorage::Blob#compose method allows us to combine more than one Active Storage blobs into a single, unified blob.

This method is helpful when we create composite files (for example, integrating an audio track with its lyrics) or generating integrated documents from multiple components.

ActiveStorage Compose Method

ActiveStorage::Blob.compose(blobs, filename:, content_type: nil, metadata: nil)

Rails 7.2, adds a new parameter key that allows us to have custom key, similar to other Blob API’s

Example

Here’s a code example demonstrating how to pass the custom key to the compose method:

# Assuming we have blobs for audio (music.mp3) and lyrics (lyrics.txt)

audio_blob = ActiveStorage::Blob.find_by(filename: "music.mp3")
lyrics_blob = ActiveStorage::Blob.find_by(filename: "lyrics.txt")

composed_blob = ActiveStorage::Blob.compose(
  [audio_blob, lyrics_blob],
  key: "custom_key",
  filename: "combined_audio_lyrics.zip",
  content_type: "application/zip"
)

Result

composed_blob contains the custom key

#<ActiveStorage::Blob:0x000000010cb3f0a8
 id: "692fb814-87a0-4878-aac6-b4e1f6f3fad6",
 key: "custom_key",
 filename: "combined_audio_lyrics.zip",
 content_type: "application/zip",
 metadata: {"composed"=>true},
 byte_size: 12318,
 checksum: nil,
 created_at: Wed, 29 May 2024 06:25:03.534493000 UTC +00:00,
 service_name: "local">

Need expert help with Rails?

Saeloun is a Rails Foundation Contributing Member helping teams modernize, upgrade, scale, and maintain production Rails applications.

Our Expertise

  • Rails contributors
  • 500+ Technical Articles
  • Production Rails consulting
  • Performance Optimization

Services

  • Rails application development
  • Code Audits
  • Rails upgrades
  • Team Augmentation

Need help on your Ruby on Rails or React project?

Join Our Newsletter