2017-06-20 77 views
0

嘗試使用carrierwave刪除上傳的圖片軌道4 carrierwave

<%= f.fields_for :images do |ff| %> 
    <div class="form-group"> 
     <label> 
     <%= ff.check_box :remove_image %> 
      <%= image_tag ff.object.image %> 
     </label> 
     </div> 
<% end %> 

獲得這樣PARAMS在控制器

"images_attributes"=>{"0"=>{"remove_image"=>"0", "id"=>"13"}, "1"=>{"remove_image"=>"1", "id"=>"14"}, "2"=>{"remove_image"=>"0", "id"=>"15"}, "3"=>{"remove_image"=>"0", "id"=>"16"}, "4"=>{"remove_image"=>"0", "id"=>"17"}, "5"=>{"remove_image"=>"0", "id"=>"18"}}} 

刪除上傳的圖片,但這些PARAMS什麼也沒有發生,我缺少什麼更新對象時?

更新

def update 
    @country = Country.find(params[:id]) 

    if @country.update(country_params) 
     flash[:notice] = 'Country is successfully updated.' 
     redirect_to edit_admin_country_path 
    else 
     flash[:error] = @country.errors.full_messages[0] 
     render 'edit' 
    end 
    end 

    def country_params 
    permitted = [{images_attributes: ["image", "@original_filename", "@content_type", "@headers", "_destroy", "id", "remove_image"]}] 
    params.require(:country).permit(*permitted) 
    end 

class Country < ActiveRecord::Base 
    has_many :images 
    .... 
end 

class Image < ActiveRecord::Base 

    mount_uploader :image, ImageUploader 
    belongs_to :country 
end 
+0

是否有任何控制器在哪裏看你如何試圖刪除這些圖像? –

+0

請分享您的模態。 –

+0

已更新我的帖子 –

回答

1

你的形式看起來不錯,但你缺少控制器動作

礦的樣子:

class ImageController < ApplicationController 
    ... 
    def update 
    @image = Image.find(params[:id]) 
    ... 
    if params[:images][:remove_image].present? 
     @image.remove_image! 
    end 
    @image.save 
    end 
end 

如果你想手動刪除文件,你可以調用remove_avatar !,然後保存該對象。

+0

國家有很多圖片,不只一個 –

+0

我想一次刪除所有圖片,我沒有問題循環和刪除,希望我能找到更優雅的方式 –

+0

非常感謝您的幫助! –