未设置Carrierwave唯一文件名

时间:2012-12-24 02:14:24

标签: ruby-on-rails ruby carrierwave

我在github上查看了carrierwave wiki,并使用method they describe生成了唯一的文件名:

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 mehod被忽略了。不确定发生了什么。我重置了服务器和所有内容,仍然在上传的文件和缩略图版本上获得原始文件名。

1 个答案:

答案 0 :(得分:2)

我不确定为什么文档在||=方法中使用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