public_id在cloudinary和carrierwave之间不匹配

我正在使用CarrierWave和Cloudinary将多张图片上传到我的博客post。 我从浏览器上传它们。 使用post表单中的文件字段会发生这种情况。

  

提交表单时,会为每个图像创建一个picture实例,并将图像上传到Cloudinary。

 def create @post = Post.new(post_params) if @post.save if params[:images] params[:images].each do |image| @post.pictures.create(image: image) Cloudinary::Uploader.upload(image) end end end end 

我使用的ImageUploader几乎是默认的(包含cloudinary插件的exept)

 class ImageUploader < CarrierWave::Uploader::Base include Cloudinary::CarrierWave storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end end 

现在,图像正在保存到我的服务器,图像正在上传到cloudinary。 但不知何故, public_id's永远不会匹配。 有谁知道为什么不呢? 当我调用Cloudinary::Uploader.upload(image)时是否创建了新的public_id

在检查了Tal Lev-Ami的项目后(非常感谢!)我想到了,我发现我的ImageUploader的问题就在于线路

 storage :file 

在评论出这一行后,一切都运行良好(我不必手动上传我的图像)。 如果有人理解为什么这条线导致了问题,请作为我的客人在此发布以供将来参考。

无需手动将图像上传到Cloudinary。 使用CarrierWave上传器时,图像将自动上传到Cloudinary,并在模型中更新public_id。