Rails CarrierWaveのファイル名を変更する方法

RailsのCarrierWaveのファイル名は、デフォルトでは元々のファイル名が使われます。

これを好きな名前に変えるには、filenameメソッドにネーミングルールを定義します。

Case1. 固定ファイル名にする

ファイル名が”something.拡張子“となるように定義してみます。

rails generate uploaderコマンドで作成したUploaderクラスを開き、filenameメソッドを実装します。元々の拡張子はfile.extensionで取得できます。

def filename
 "something.#{file.extension}" if original_filename.present?
end

完成です。

Case2. ユニークなファイル名にする

次は、ファイル名をUUID ( Universally Unique Identifier )にしてみます。UUIDは非常にユニークな重複しない値です。

UUIDを作成するには、SecureRandom.uuidメソッドを使います。

def filename
 "#{SecureRandom.uuid}.#{file.extension}" if original_filename.present?
end

これで、UUID付きのファイル名になります。

cfdb0fb7-b4dc-4802-b812-038e92f2c34e.jpg

次のサイトに、より安全なUUIDの使い方が書いてあります。

How to: Create random and unique filenames for all versioned files