【发布时间】:2014-04-02 02:35:22
【问题描述】:
我使用 Carrierwave 上传文件已有一段时间了。我没有尝试在上传文件时重命名它们。现在我想给每个文件一个随机的名称和一个与内容类型一致的文件扩展名。我阅读了 wiki 和其他网站,建议在上传器中,我可以:
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
private
def secure_token
#implement the secure token
end
在将这些添加到上传器之后上传的文件运行良好。但是我收到了很多在此更改之前上传的文件。我想知道是否有人可以告诉我如何迁移旧文件。
我尝试向上传器添加一个方法:
def rename_file!
model.update_attribute mounted_as, "#{secure_token}.#{file.extension}"
recreate_versions!
end
然后在 Rails 控制台中,我尝试在带有附件的模型上调用它。但是,我发现模型的mounted_as 列从未更新,尽管在文件系统上,使用新名称创建了文件的各种版本。当我检查模型的mounted_as 字段时,它没有得到更新。日志实际上说该列已使用旧值进行了更新。
如何更新模型上的mounted_as 列?
此外,旧名称的旧文件似乎仍在文件系统上。有没有办法删除它们?我尝试添加一行:
file.move_to File.join("#{File.dirname file.path}, "#{secure_token}.#{file.extension}")
在rename_file! 方法中。它重命名了文件,但没有更新模型上的mounted_as 列。所以访问它的 URL 会导致 404。
【问题讨论】:
-
我会在 rake 任务中这样做
标签: rename carrierwave