2017-05-11 11 views
0

Carrierwaveのenter link description hereは、Carrierwaveがファイルをアップロードするディレクトリと、Carrierwaveがファイルを探すディレクトリの両方を提供します。しかし、私は、read_dirのようなものを定義する方法があるかどうかを知りたいと思います。これは、Carrierwaveがファイルを探すパスとなり、store_dirはファイルを格納するためだけにしておきます。Carrierwave + Rails 5:ディレクトリとディレクトリの読み取り

これはおそらく実用的ではないことは知っていますが、私は知りたいと思います。

答えて

3

store_dirは、オブジェクトの状態によって計算できます。別のディレクトリが必要なときにこの条件を設定することもできます。例:

class MyModel < ActiveRecord::Base 
    attr_accessible :use_directory_for_storing 

    mount_uploader :file, MyFileUploader 
end 

class MyFileUploader < CarrierWave::Uploader::Base 
    # ... 
    def store_dir 
    if model.use_directory_for_storing 
     "some/directory/for/storing" 
    else 
     "some/directory/for/reading" 
    end 
    end 
end 

# Usage 

object = MyModel.new(params) 
object.use_directory_for_storing = true 

object.save # the file will be stored in ".../some/directory/for/storing/" directory 

object = MyModel.last 
# will look for the file in the ".../some/directory/for/reading/" directory 
object.file.path # => ".../some/directory/for/reading/..."