Rails アプリケーションで複数の csv ファイルを作成し、それらを 1 つの要求で 1 つの zip アーカイブとしてダウンロードする方法を探しています。
アーカイブを構築するには、rubyzip gem を使用します。これをダウンロードするには、Rails の組み込み関数 send_data のみを使用します。私が抱えている問題は、rubyzip の add-function がファイルをロードするためのパス名を必要とすることです。しかし、同じリクエスト内で csv ファイルが作成されるため、パスはありません。
いくつかのコード:
# controller action to download zip
def download_zip
zip = @company.download_all
send_data zip, filename: "abc.zip", type: 'application/zip'
end
# method to create zip
def download_all
Zip::File.open('def.zip', Zip::File::CREATE) do |zipfile|
self.users.each do |user|
#some magic to combine zipfile.add() and user.to_csv
end
end
end
# method to create csv
def to_csv
CSV.generate do |csv|
#build awesome csv
end
end
パス名を zipfile.add() に渡すことができる、csv ファイルを一時的にディレクトリに保存する方法はありますか?
皆さん、良い週末をお過ごしください。コーディングをお楽しみください。