Search code examples
ruby-on-railsrubyrails-activestorage

Get path to ActiveStorage file on disk


I need to get the path to the file on disk which is using ActiveStorage. The file is stored locally.

When I was using paperclip, I used the path method on the attachment which returned the full path.

Example:

user.avatar.path

While looking at the Active Storage Docs, it looked like rails_blob_path would do the trick. After looking at what it returned though, it does not provide the path to the document. Thus, it returns this error:

No such file or directory @ rb_sysopen -

Background

I need the path to the document because I am using the combine_pdf gem in order to combine multiple pdfs into a single pdf.

For the paperclip implementation, I iterated through the full_paths of the selected pdf attachments and load them into the combined pdf:

attachment_paths.each {|att_path| report << CombinePDF.load(att_path)}

Solution

  • Use:

    ActiveStorage::Blob.service.path_for(user.avatar.key)
    

    You can do something like this on your model:

    class User < ApplicationRecord
      has_one_attached :avatar
    
      def avatar_on_disk
        ActiveStorage::Blob.service.path_for(avatar.key)
      end
    end