그래서 Cloudrier 직접 업로드를 통해 Carrier Wave를 통해 이미지를 업로드하고 올바르게 연결했지만 일단 생성되면 업데이트하거나 파괴 할 수 없습니다.Cloudine direct를 사용하여 이미지를 올바르게 업데이트하거나 삭제하는 방법은 무엇입니까?
업데이트 할 때 이미지는 업로드되고 내 대시 보드를 통해 사용할 수 있지만 연결된 레코드는 변경되지 않으며 항상 원본 이미지를 볼 수 있습니다.
이미지를 파괴하려고하면 오류가 발생합니다 : Couldn't find Image with ID=1 for Finish with ID=11
Finish
은 부모 모델이며 이미지 필드는 중첩됩니다. 또한 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