2013-08-06 3 views
0

그래서 Cloudrier 직접 업로드를 통해 Carrier Wave를 통해 이미지를 업로드하고 올바르게 연결했지만 일단 생성되면 업데이트하거나 파괴 할 수 없습니다.Cloudine direct를 사용하여 이미지를 올바르게 업데이트하거나 삭제하는 방법은 무엇입니까?

업데이트 할 때 이미지는 업로드되고 내 대시 보드를 통해 사용할 수 있지만 연결된 레코드는 변경되지 않으며 항상 원본 이미지를 볼 수 있습니다.

이미지를 파괴하려고하면 오류가 발생합니다 : Couldn't find Image with ID=1 for Finish with ID=11Finish은 부모 모델이며 이미지 필드는 중첩됩니다. 또한 Image 모드는 다형성입니다. 숨겨진 입력에 20이 있으면 이미지 ID가 "1"이라고 생각하는 이유를 모르겠습니다.

내가 뭘 잘못하고 있는지 아이디어가 있습니까? 여기

은 (게시하는 것이 유용 할 것입니다 다른 코드가 있으면 알려 주시기 바랍니다) 생성 된 형태이다 :

<form accept-charset="UTF-8" action="/finishes/11" class="edit_finish" enctype="multipart/form-data" id="edit_finish_11" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" value="✓" type="hidden"> 
    <input name="_method" value="put" type="hidden"> 
    <input name="authenticity_token" value="xxx=" type="hidden"> 
    </div> 
    <fieldset id="finishes"> 
    <legend> 
     Finish 
    </legend> 
    <div class="active"> 
     <div class="field"> 
     <label for="finish_title">Title</label> 
     <input id="finish_title" name="finish[title]" size="30" value="Eggshell White" type="text"> 
     </div> 
     <div class="singular-addable" id="finish-image-92807"> 
     <div class="addable-group images"> 
      <div class="image-field-group"> 
      <div class="field"> 
       <label for="finish_image_attributes_0_asset">Image</label> 
       <input class="cloudinary-fileupload" data-cloudinary-field="finish[image_attributes][0][asset]" data-form-data="{'timestamp':1375824622,'callback':'http://localhost:8080/cloudinary_cors.html','signature':'xxx','api_key':'xxx'}" data-url="https://api.cloudinary.com/v1_1/hmnxgsjti/auto/upload" name="file" type="file"> 
      </div> 
      <div class="image-box"> 
       <img alt="v1375727159/owybb0xaxdlhgfyvwtwx.jpg" src="http://res.cloudinary.com/hmnxgsjti/image/upload/t_hint/v1375727159/owybb0xaxdlhgfyvwtwx.jpg"> 
      </div> 
      <div class="remove-fields"> 
       <input class="destroy" id="finish_image_attributes_0__destroy" name="finish[image_attributes][0][_destroy]" value="false" type="hidden"><a href="#" class="remove"><i class="icon-remove-circle icon-large" title="Remove"></i></a> 
      </div> 
      </div> 
      <input id="finish_image_attributes_0_id" name="finish[image_attributes][0][id]" value="20" type="hidden"> 
     </div> 
     </div> 
    </div> 
    </fieldset> 
    <div class="actions"> 
    <input name="commit" value="Save" type="submit"> 
    </div> 
</form> 

편집 : 더 코드는 요청

image_uploader.rb

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

    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 
end 

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 

finish.rb

class Finish < ActiveRecord::Base 
    default_scope order('finishes.title ASC') 
    attr_accessible    :name, 
           :title, 

           ## belongs_to ## 

           ## has_many ## 
           :sku_ids, 
           :compilation_ids, 

           ## nested attributes ## 
           :image_attributes 


    has_many      :skus 
    has_many      :compilations 

    has_many      :image, as: :imageable, :dependent => :destroy 
    accepts_nested_attributes_for :image, reject_if: proc { |attrs| attrs['asset'].blank? && attrs['asset_cache'].blank? }, allow_destroy: true 

    validates_presence_of   :image 
    validates_presence_of   :title 

    before_save     :create_name 

    def self.skus(finish_id = :id) 
    @skus = Sku.where(:finish_id => finish_id) 
    return @skus 
    end 

    private 

    def create_name 
    self.name = title.parameterize 
    end 
end 

finishes_controller.rb

class FinishesController < ApplicationController 
    # Ajax Routes 
    def skus 
    @skus = Finish.skus(params[:id]) 
    render "skus/_list", locals: { type: params[:type] }, layout: false 
    end 

    # REST Routes 
    def index 
    @finishes = Finish.all 

    respond_to do |format| 
     format.html 
     format.json { render json: @finishes } 
    end 
    end 

    def show 
    @product_ids = Product.skus_by_finish(params[:id]).map{|sku| sku.product_id} 
    @products = Product.where(:id => @product_ids).order(:name) 

    render "layouts/templates/list" 
    end 

    def new 
    @finish = Finish.new 

    @finish.image.build 

    respond_to do |format| 
     format.html 
     format.json { render json: @finish } 
    end 
    end 

    def edit 
    @finish = Finish.find(params[:id]) 
    end 

    def create 
    @finish = Finish.new(params[:finish]) 

    respond_to do |format| 
     if @finish.save 
     format.html { redirect_to finishes_path, notice: 'Finish was successfully created.' } 
     format.json { render json: finishes_url, status: :created, location: @finish } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @finish.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    @finish = Finish.find(params[:id]) 

    respond_to do |format| 
     if @finish.update_attributes(params[:finish]) 
     format.html { redirect_to finishes_url, notice: 'Finish was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @finish.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
    @finish = Finish.find(params[:id]) 
    @finish.destroy 

    respond_to do |format| 
     format.html { redirect_to finishes_url } 
     format.json { head :no_content } 
    end 
    end 
end 

답변

0

이 전혀 Cloudinary 문제가되지 않을 밝혀졌다. 나는에 update 또는 destroy 방법을 가지고 있지 않았기 때문에 이미지가 업데이트되지 않은

1) 내 images_controller (DOH!)

2)이 Couldn't find Image with ID=1 for Finish with ID=11 오류를 얻고 있었다 때문에의 숨겨진 fileds 표시 내 JS 삭제가 잘못 구성되어 숨겨진 모든 필드의 값이 변경되었습니다. 비록 그것이 변화하지 않았기 때문에 내가 왜 그렇게 일했는지 모르겠지만.