carrierwave で新規ファイル保存

github.com

github.com

ファイルをアップロードするのではなく、例えばサーバ側で rubyXL を用いて新規ファイルを作ってそれを carrierwave の仕組み上で管理したい。

carrierwave 用に mount_uploader した変数に ActionDispatch::Http::UploadedFile を渡せば良いのだろうけど、やり方がわからない。

ActionDispatch::Http::UploadedFile

rubyXL で新規にデータを作った場合はまだファイルになっていない。
StringIOの状態。

そこで、ささたつさんのサイトに答えが。よくこんなのわかるなぁ。すごい。

blog.livedoor.jp

tempfile を作って、ActionDispatch::Http::UploadedFile インスタンスを渡せばよい。
tempfile を作るときに、carrierwave 側で拡張子で制限を行っている場合は new の際の第一引数配列の二つ目が suffix なので、拡張子を指定すること。

singleton method Tempfile.new (Ruby 2.2.0)