如何使用CarrierWave重命名现有图像? (这个问题很接近但不完全相同:Renaming uploaded files with Carrierwave)例如,如果model.image.url
是foo-bar-jpg
,我怎样才能将文件和相应的数据库字段重命名为foo-bar.jpg
}?
model.image.recreate_versions!
将创建新文件,但在数据库中它不会更改模型的图像字段。
答案 0 :(得分:2)
Carrierwave的locomotive branch似乎已重命名支持 - 具体文件为here。
转换文件类型时主要有file rename support,但没有重命名支持:
"This should help with situations where a file has multiple versions,
and at least one of the versions is of a different format than the master version."
答案 1 :(得分:1)
我使用了此处描述的技术:How to assign a remote file to Carrierwave?
这可能不是最佳方式,但它对我有用。我的远程文件恰好是旧文件名/路径。
首先,我更改了Carrierwave上传器以获得我想要的新文件名样式。然后我写了一个rake任务来迭代记录并更新这样的文件:
model.remote_image_url = old_image_url
model.save!
这将再次上传现有文件,根据更新的Uploader设置名称/路径(并重新创建所有版本)。我还没有解决清理旧文件的问题,如果你的store_dir是相同的(我的更改也是如此),我不确定这将如何工作。
确保在完成整个表格之前对几条记录进行彻底测试,这很容易弄得一团糟。请注意,更改store_dir将破坏现有文件的所有查找。
答案 2 :(得分:0)
发现这一点,它似乎过时了,但也许可以帮助某人:
https://github.com/stvkoch/carrierwave_single_store