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">