ruby-on-rails - Rails + Mongoid + Carrierwave + Cloudinary

标签 ruby-on-rails carrierwave cloudinary uploadcare

我正在从 Uploadcare 迁移到 Cloudinary。

但是当我尝试更新文件字段时,该字段设置为“old

p = Photo _id: 556d225e69702d45b0000000, created_at: 2015-06-02 03:26:22 UTC, updated_at: 2015-06-02 03:26:22 UTC, file: nil
p.file = p.id
p.save

返回

Photo _id: 556d225e69702d45b0000000, created_at: 2015-06-02 03:26:22 UTC, updated_at: 2015-07-30 19:41:12 UTC, file: "_old_"


p.file = <PhotoUploader:0x007fe96fc86800 @model=#<Photo _id: 556d225e69702d45b0000000, created_at: 2015-06-02 03:26:22 UTC, updated_at: 2015-07-30 19:41:12 UTC, file: "_old_">, @mounted_as=:file, @stored_public_id=nil, @stored_version=nil, @file=nil, @original_filename=nil, @public_id=nil, @storage=#<Cloudinary::CarrierWave::Storage:0x007fe9701f8f18 @uploader=#<PhotoUploader:0x007fe96fc86800 ...>>>

有什么建议吗?

最佳答案

如果您保存模型时未向上传者字段分配值,然后稍后分配值,CarrierWave 将暂时set the field_old_ 以强制 Mongoid 存储该字段。一旦模型被持久化,就会分配正确的值:

001 > p = Photo.new title: 'Out with the old!'
 => #<Photo _id: 55c76e895d8b01bef0000000, title: "Out with the old!", image: nil, clean: nil>
002 > p.save
 => true
003 > p
 => #<Photo _id: 55c76e895d8b01bef0000000, title: "Out with the old!", image: nil, clean: nil>
004 > p.image = File.open( 'giraffe-small.jpg')
 => #<File:giraffe-small.jpg>
005 > p
 => #<Photo _id: 55c76e895d8b01bef0000000, title: "Out with the old!", image: "_old_", clean: nil>
006 > p.save
 => true
007 > p
 => #<Photo _id: 55c76e895d8b01bef0000000, title: "Out with the old!", image: "image/upload/v1439133413/dyirrctc3ls3ficre7hj.jpg", clean: nil>

请注意,Cloudinary uploader 接受图像标识符或文件对象(见下文)。

型号

class Photo
  include Mongoid::Document
  field :title, type: String
  mount_uploader :image, ImageUploader
end

上传者

class ImageUploader < CarrierWave::Uploader::Base
  include Cloudinary::CarrierWave
end

存储对已上传到您的 Cloudinary 帐户的图像的引用

如果您的图像 URL 是 http://res.cloudinary.com/tocker/image/upload/v1435050504/sample.jpg *

p = Photo.new
p.title = "Existing image"
signature = Cloudinary::Utils.api_sign_request({:public_id=>"sample", :version=>"1435050504"}, Cloudinary.config.api_secret)
p.image = "image/upload/v1435050504/sample#{signature}"
p.save

*图片网址可以在您的 Cloudinary media library 中找到.

上传本地镜像文件并存储引用

p = Photo.new
p.title = "Uploaded local image"
p.image = File.open( path_to_local_image_file)
p.save

关于ruby-on-rails - Rails + Mongoid + Carrierwave + Cloudinary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31732702/

相关文章:

swift - cloudinary swift 3 版本如何销毁图像

ruby-on-rails - CarrierWave/Cloudinary 缓存图像在开发环境中无法跨表单重新显示

ruby-on-rails - 关于更新方法问题的 Rails 3 和回形针

ruby-on-rails - rails ActiveSupport :Concern and Private Methods

ruby-on-rails - CarrierWave_Direct gem : Keep current directory structure on S3

ruby-on-rails-4 - Cloudinary 图像对于 Rails4 和 CarrierWave 来说并不刷新

node.js - 在 Keystone.js 中显示带有描述的图库图像时出现问题

css - 文件的 Rails-Heroku-SASS 语法错误

ruby-on-rails - 如何在 Capybara 测试中用 Rspec 淘汰 Warden/Devise

ruby-on-rails - 使用 Heroku 上的 CarrierWave 将上传的文件提取到 S3