CarrierWave を使用して S3 に画像を保存しています。画像をアップロードする前に、ランダムな文字列に名前が変更されます。ここで、検索を高速化するために、ファイル名の最初の 2 文字にちなんで名付けられたディレクトリにファイルを配置したいと考えました。しかしそうすると、Rails はstack level too deep
.
したがって、呼び出し#{model.image[0, 2]
は無限再帰につながると思います。ファイル名だけを文字列としてアクセスする方法はありますか? それとももっと簡単な解決策ですか?
これはアップローダです:
class ImageUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"images/#{model.image[0, 2]}/"
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(8))
end
end