1

私はgithubでcarrierwavewikiを見て、それらが説明する方法を使用して一意のファイル名を生成しました。

def filename
   @filename ||= "#{secure_token}.#{file.extension}" if original_filename.present?
end

private
def secure_token
    var = :"@#{mounted_as}_secure_token"
    random_token = Digest::SHA2.hexadigest("#{Time.now.utc}--#{model.id.to_s}").first(20)
    model.instance_variable_get(var) or model.instance_variable_set(var, random_token)
end

(ただし、ハッシュを使用)

私が抱えている問題は、ファイル名がまだ元のファイルの名前に設定されていることです。それはfilenameまるで方法が無視されているかのようです。何が起こっているのかよくわかりません。サーバーとすべてをリセットしましたが、アップロードされたファイルとサムネイルバージョンで元のファイル名を取得しています。

4

1 に答える 1

2

docs||=がメソッドで演算子を使用した理由はわかりませんfilenameが、この方法で@filenamenil、がそうでない限り、一意のファイル名は設定されません。これは通常の場合ではないようです。=代わりに使用する||=(または割り当てをまったく使用しない)と、問題が解決するようです。

def filename
  @filename = "#{secure_token}.#{file.extension}" if original_filename.present?
  # The following line works too
  #"#{secure_token}.#{file.extension}" if original_filename.present?
end
于 2012-12-24T02:50:41.853 に答える