2017-03-08 15 views

回答

0

这里有一个解决方案,您可以调整和修改,以满足您的需求!它会生成带有自己裁剪版本的原始父图像,以及裁剪后的完全独立的基本图像。通常在Carrierwave中使用并引用的父图像裁剪版本可用作各种占位符,以生成新的基本图像。所以在实践中,它会随着每一种作物而不断变化。

如果上传安装到模型类(如这里的情况一样),则工作需要通过相关的控制器来进行,而不是在上载或模型类。这个非常重要。

在这种情况下,因为目标是有选择地拉出来,并上传现有的图像版本,因为裁剪本身发生了控制器的更新行动的一部分,该代码添加作了那里。要理解的关键之一是文件裁剪文件本身的位置:@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 

相关问题