2017-03-08 10 views
0

サムネイルが独自の「ベース」イメージになるように、既存のイメージバージョン、たとえば、thumb_xyz.jpgをCarrierwave経由で再アップロードできますか?既存のイメージバージョンをアップロードして独自の「ベース」イメージにする

私は店をつぶすことを試みました!アップローダーが、私はそれを動作させることはできません...

uploader.ImageUploader.new 
uploader.store!(image_url(:thumb)) 

答えて

0

ここでは、微調整し、ニーズに合わせて変更することができます一つの解決策です!その結果、クロップされたものの完全に別個のベースイメージだけでなく、それ自身のクロップバージョンを有する元の親イメージが得られる。 Carrierwaveで通常使用され、参照される親画像のクロップバージョンは、新しい基本画像を生成する手段としてソートのプレースホルダとして機能します。だから、実際には、それは絶えず各作物ごとに変わるでしょう。

アップローダがモデルクラスにマウントされている場合(この場合)、アップローダまたはモデルクラスではなく、関連付けられたコントローラを介して作業を行う必要があります。これはとても重要です。

この場合、既存のイメージバージョンを選択的に取り出してアップロードすることが目的であり、コントローラの更新アクションの一部としてクロップ自体が行われるため、コードの追加が行われました。理解しておくべき重要なことの1つは、ファイルクロップファイル自体がどのように配置されているかです。@image.image.versions[:crop]。その知識で、それはパラメータとして渡すだけの問題です。

images_controller.rb 
... 
def update 
    respond_to do |format| 
    if @image.update(image_params) 
     format.html { redirect_to @image, notice: 'Image was successfully updated.'} 
     format.json { render :show, status: :ok, location: @image } 

     #### HERE IS THE SOLUTION ### 
     @crop_image = current_user.images.build(image: @image.image.versions[:crop]) 
     if @crop_image.save 
     format.html { redirect_to @crop_image, notice: 'Crop image successfully created.'} 
     format.json { render :show, status: :created, location: @crop_image } 
     else 
     format.html { render :new, notice: 'Crop image could not be saved for some reason...'} 
    end 
    else 
    format.html { render :edit } 
    format.json { render json: @image.errors, status: :unprocessable_entity } 
    end 
end 

エンド

関連する問題