bugfix> ruby-on-rails > 投稿

ガイド 添付ファイルをディスクに保存して、次のようにプロセスを実行できると言っています:

message.video.open do |file|
  system '/path/to/virus/scanner', file.path
  # ...
end

私のモデルには次のように定義された添付ファイルがあります:

has_one_attached :zip

そして、モデルで私は定義しました:

def process_zip      
  zip.open do |file|
    # process the zip file
  end
end

しかし、エラーが発生しています:

private method `open' called

zip.open呼び出しで。

処理のためにzipをローカルに保存するにはどうすればよいですか?

回答 2 件
  • Rails 5.2の代替として、これを行うことができます:

    def process_zip      
       # Download the zip file in temp dir
       zip_path = "#{Dir.tmpdir}/#{zip.filename}"
       File.open(zip_path, 'wb') do |file|
           file.write(zip.download)
       end   
       Zip::File.open(zip_path) do |zip_file|  
           # process the zip file
           # ...
           puts "processing file #{zip_file}"
       end
    end
    
    

  • それはエッジガイドです( edgeguides.rubyonrails.org に注意してください  URL内);GitHubのrails/railsリポジトリのmasterブランチに適用されます。 masterの最新の変更は、Railsのリリースバージョンにはまだ含まれていません。

    Rails 5.2を使用している可能性があります。エッジレールを使用して ActiveStorage::Blob#open を活用する :

    gem "rails", github: "rails/rails"
    
    

あなたの答え