Posted at

CarrierWaveでUploaderごとに保存するディレクトリを変える

More than 3 years have passed since last update.

調べてもうまく探せなかったので備忘録として。

CarrierWaveでUploaderごとにディレクトリを分けたいケースがあると思います。プロフィール画像はpublicにおいてもいいけど、ユーザの投稿画像は別のところに置きたいとか。

config/initializers/carrierwave.rbに、下記のように定義すれば、public以外のところにファイルの保存先を自由に定義できます。


config/initializers/carrierwave.rb

CarrierWave.configure do |config|

config.root = "#{Rails.root}/private"
end

https://github.com/carrierwaveuploader/carrierwave/wiki/How-To%3A-Secure-Upload)

ただ、この方法だと前述のようにUploaderごとに変えたい場合にはうまく行きません。なので、下記のようにUploaderの中で書いてあげればうまくいきました。


app/uploaders/hoge_uploader.rb

class HogeUploader < CarrierWave::Uploader::Base

storage :file

def root # ここでrootを書いてあげる
"#{Rails.root}/private"
end
end