0

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
4

2 に答える 2