Cloudinaryが提供する指示に従っていますが、直接アップロードを機能させることができませんでした。さらに複雑なことに、私の画像アップロードはポリモーフィック クラスであり、通常はネストされた形式になっています。
Cloudinary と Carrierwave の両方の gem を使用しています。非直接セットアップではすべてが正常に機能しますが、一度にアップロードする画像が多すぎるとユニコーンがタイムアウトします (これはよくあることです)。
以下は、ファイルのアップロードを追加するパーシャルです。複数の異なるフォームにネストされており、ユーザーはフィールドを動的に追加および削除できます。指示に従って、 と を置き換えようとしました= f.file_field :asset
が= f.hidden_field :asset_cache
、= cl_image_upload :asset
これにより次のエラーがスローされます: wrong number of arguments (1 for 2..3)
。2 番目のパラメーターを追加するdata-cloudinary-field
と、生成された HTML に追加されます。さらに、画像が追加され、レコードに参照が添付されていない場合、アップロードは行われません。
_image_fields.html.haml
.image-field-group
.field
= f.label :asset, "Image"
= cl_image_upload :asset
/ = f.file_field :asset
/ = f.hidden_field :asset_cache
- if f.object && f.object.asset && f.object.asset.filename
.image-box
= cl_image_tag(f.object.asset.filename.to_s, :transformation => 'hint', alt: f.object.asset.filename.to_s)
.remove-fields
= link_to_remove_fields f
関連ファイルは次のとおりです。
image.rb
class Image < ActiveRecord::Base
default_scope order('images.id ASC')
attr_accessible :asset,
:asset_cache
belongs_to :imageable, polymorphic: true
mount_uploader :asset, ImageUploader
end
image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
def extension_white_list
%w(jpg jpeg gif png)
end
end
編集:画像コントローラーを追加
images_controller.rb
class ImagesController < ApplicationController
before_filter :load_imageable
def index
@images = @imageable.images
end
def new
@image = @imageable.images.new
end
def create
@image = @imageable.images.new(params[:image])
if @image.save
redirect_to @imageable, notice: "Image created."
else
render :new
end
end
private
def load_imageable
resource, id = request.path.split('/')[1, 2]
@imageable = resource.singularize.classify.constantize.find(id)
end
end