carrierwaveで画像名をユニークにした時にS3とDBでファイル名が異なる
問題
ファイル名をユニークにするために以下の処理をしていた
def filename p "#{SecureRandom.uuid}.#{file.extension}" if original_filename.present? end
がs3にcarrierwaveで画像アップ&DBに保存すると、s3とDBのファイル名が違っていた。
この人たちと同じ現象
原因
filenameメソッドが複数回呼ばれているため。 save前に2回、saveの後に1回の計3回呼ばれている。
解決方法
def filename "#{secure_token}.png" 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.uuid) end