重命名现有的CarrierWave文件

chr*_*aly 6 ruby-on-rails carrierwave

如何使用CarrierWave重命名现有图像?(这个问题是接近,但不是真的一样:重命名上传的文件与Carrierwave)例如,如果model.image.urlfoo-bar-jpg我怎么能既文件,以及相应的数据库字段重命名为foo-bar.jpg

model.image.recreate_versions! 将创建新文件但在数据库中它不会更改模型的图像字段.

小智 2

我使用了此处描述的技术:如何将远程文件分配给 Carrierwave?

这可能不是最好的方法,但它对我有用。我的远程文件恰好是旧文件名/路径。

首先,我更改了 Carrierwave 上传器,使其具有我想要的新文件名样式。然后我编写了一个 rake 任务来迭代记录并更新文件,如下所示:

model.remote_image_url = old_image_url
model.save! 
Run Code Online (Sandbox Code Playgroud)

这将再次上传现有文件,根据更新的上传程序设置名称/路径(并重新创建所有版本)。我还没有解决清理旧文件的问题,我不确定如果你的 store_dir 是相同的(我的也改变了),这将如何工作。

确保在运行整个表之前对一些记录进行彻底测试,否则很容易把事情弄乱。请注意,更改 store_dir 将中断对现有文件的所有查找。