1

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
4

1 に答える 1

1

次のドキュメント セクションでは、Ruby on Rails アプリケーションでブラウザから画像を直接アップロードする方法について説明します。jQuery と必要なプラグインを正しい順序で含め、必要な Javascript 構成を追加してください。

http://cloudinary.com/documentation/rails_image_upload#direct_uploading_from_the_browser

画像の直接アップロードを実行するファイル入力フィールドの埋め込みはcl_image_upload_tag、入力フィールドの名前を受け入れるヘルパー メソッドを使用して行われます。

CarrierWave を使用する場合、cl_image_uploadヘルパー メソッドを使用できます。このメソッドを直接呼び出す場合は、オブジェクト名と属性を渡す必要があります ( や などの他の Rails ビュー ヘルパー メソッドと同様text_field_tag) text_field。または、Rails の標準フォーム ビルダーで使用することもできます。モデルが呼び出されentity、CarrierWaver アップローダーがマウントされた属性が呼び出されると仮定するとasset、次のビュー コードは、ブラウザーから直接アップロードするための署名付きファイル入力フィールドを埋め込む必要があります。

= form_for(:entity) do |f|
  = f.cl_image_upload(:asset)

さらに、以下に示すようpresent?に、アセットが存在するかどうかを確認し、CarrierWave 属性を に直接渡すために使用できますcl_image_tag。または、 を使用して画像 URL を動的に構築する代わりに、CarrierWave 標準バージョンを使用できますcl_image_tag

- if f.object && f.object.asset.present?
  .image-box
    = cl_image_tag(f.object.asset, :transformation => 'hint', alt: f.object.asset.filename.to_s)

ファイル入力フィールドがビューに正常に追加されたが、直接アップロードが実行されない場合は、コンソールに Javascript エラーがないこと、およびすべての jQuery プラグインが正しく含まれていることを確認する必要があります。

于 2013-08-03T05:58:58.960 に答える