【问题标题】:CarrierWave how to change object path after downloadedCarrierWave 下载后如何更改对象路径
【发布时间】:2020-03-31 23:17:26
【问题描述】:

我必须复制一个包含 CarrierWave 图像的模型,但我需要使用相同的图像文件,问题是我的文件路径使用的是模型 UUID,并且在保存新对象后,图像的 UUID 也会更新.

保存对象后如何更改图片文件路径以保持原图路径?

这是我存储在 aws 中的图像:

@mounted_as=:my_cover, @storage=#<CarrierWave::Storage::Fog:0x0000000002ef @uploader=#<CoverUploader::Uploader82999640:0x0000000002ef ...>>, @file=#<CarrierWave::Storage::Fog::File:0x0000000002ef @uploader=#<CoverUploader::Uploader82999640:0x0000000002ef

我可以访问 Model.my_cover.file.path 或 Model.my_cover.cover.path 但我无法更改路径值。

我不想复制图像,因为这会使文件存储空间增加一倍。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails image carrierwave


    【解决方案1】:

    复制对象时,您应该能够在保存新对象之前沿图像从前一个对象复制。 假设您的模型名为 Model,并且有一个名为 my_cover 的图像属性。

    a = Model.new
    b = a.dup
    
    b.my_cover = a.my_cover
    b.save
    

    Carrierwave 使用引用图像 URL 的图像对象,您可以将其复制到其他对象。

    【讨论】:

    • 这可行,但会复制图像,在这种情况下,我现在的理想解决方案是使用相同的图像,仅在保存新模型对象后修改 my_cover.path,如下所示:a = Model.new b = a.dup ` b.save` b.my_cover.path = a.my_cover.path b.save - 由于 UUID 需要保存两次,第一次保存创建新的 UUID,第二次保存后更改 image_path。
    • 您也可以尝试将新对象 b 的 remote_my_cover_url 设置为与对象 a 相同的图像 URL。
    • 这个不适合我 (remote_my_cover_url),我现在会使用第一个,直到找到更好的选择 - 谢谢!
    • 试试这个,名字可能不一样:github.com/carrierwaveuploader/…
    猜你喜欢
    • 2018-06-26
    • 2021-11-26
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多