0

これまでMongoidの組み込みPhotoモデルとして正常に機能していたCloudinarygemを使用しました。

class PhotoUploader < CarrierWave::Uploader::Base
  include Cloudinary::CarrierWave
  def public_id
    return model.id
  end
end

class Photo
  include Mongoid::Document
  include Mongoid::Timestamps  
  embedded_in :place#, :inverse_of => :photos, :autosave => true
  mount_uploader :image, PhotoUploader
  #...
end

ただし、Mongoid 3にアップグレードした後、画像のURLを取得することはできなくなりました。この写真モデルを考えてみましょう:

1.9.3p194 :019 > p
 => #<Photo _id: 507bc3c82a450b14bd00e00a, _type: nil, created_at: 2012-10-15 08:05:28 UTC, updated_at: 2012-10-15 08:05:28 UTC, image_filename: nil, caption: nil, original_url: "http://www.reactionny.com//images/assets/101755_316529.JPG", image: "v1350288333/507bc3c82a450b14bd00e00a.jpg"> 
1.9.3p194 :020 > p.image
 => /assets/fallback/default.png 
1.9.3p194 :021 > p.image_url
 => "/assets/fallback/default.png" 
1.9.3p194 :022 > p['image']
 => "v1350288333/507bc3c82a450b14bd00e00a.jpg" 

完全修飾のCloudinaryURLをフォームで返さなくなるのはなぜhttp://res.cloudinary.com/XXXXXX/image/upload/v1350288842/507bc5ca2a450b14bd00e896.jpgですか?

4

1 に答える 1

1

carrierwave-mongoid画像の保存元のフィールド名をに変更したようyyyですyyy_filenameimage_filenameモデル検査印刷では、それがであることがわかりますnil

Cloudinary GEMおよびCarrierWaveとの統合は正常に機能しているようですが、モデルを移行する必要があります。関連するフィールドは以前は「image」と呼ばれていましたが、現在は「image_filename」と呼ばれています。おそらく、新しいフィールド名を使用するようにモデルを更新し、すべての値をコピーする必要があります。

別の可能な解決策は、以下を使用して属性名を具体的に設定することですmount_on

mount_uploader :image, PhotoUploader, mount_on: :image
于 2012-11-19T07:44:12.737 に答える