2017-03-25 74 views
1

我正在使用Cloudinary和CarrierWave处理我的图片上传。我遵循的是This is the guide。我有一个Collection模型的type: string一个cover柱:如何使用CarrierWave删除上传到Cloudinary的图像? [Rails]

collection.rb

class Collection < ActiveRecord::Base 
    has_many :posts 
    belongs_to :user 
    mount_uploader :cover, ImageUploader 
end 

而下面是我image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base 

    include Cloudinary::CarrierWave 
    include CarrierWave::MiniMagick 

    version :default do 
    cloudinary_transformation quality: "auto", width:640, crop: "scale", fetch_format: "auto" 
    end 

end 

我使用上传形式:simple_form

= simple_form_for @collection do |f| 
    = f.input :cover, label: false, include_blank: true, input_html: { onChange: 'window.loadFile(event)' } 

现在,上传工作正常。对于上传的每张图片,该特定Collectioncover列将更改为上传图片的网址。那里没有问题。但是,我似乎无法找到一种方法来删除上传的图像。当然,我可以用另一个替换上传的图像,但我不能删除它,以便cover列再次变成nil。我尝试将上传表单和导航控制台的属性更新为nil'',但都无效。我也试过@collection.remove_cover!,如CarrierWave guide中所提到的那样,它也没有工作。有人可以帮忙吗?

回答

1

你可以叫上你的Carrierwave对象的file属性的删除方法,如:

@collection.cover.file.delete 

假设delete_remote方法设置为true(默认),它会从你的模型中删除实例,如以及从Cloudinary存储。

参见:https://github.com/cloudinary/cloudinary_gem/blob/master/lib/cloudinary/carrier_wave.rb#L172

+0

当我尝试'@ collection.cover.file'它确实表明了文件,但是当我在'@ collection.cover.file.delete'类型,它返回'=> {”结果“=>”找不到“}'。我也试过'@ collection.cover.file.exists?',并且返回'=> false'。这是为什么发生?我有没有Cloudinary设置错误? – Arif

+0

听起来好像它已经从您的Cloudinary帐户中删除。你注意到了吗?看起来操作成功并且File实例与远程资源一起被删除。如果它在那里,它会在这行代码后被删除。 –

相关问题