2017-02-23 1 views
4

carrierwaveを使用して画像をアップロードするサンプルレールアプリを作成しました。複数の画像をアップロードできます。しかし、今私はそれらを削除したいとき、私はちょうど解決の捜索に忙しかった。ドキュメントでは、@user.remove_avatar!を使用して単一イメージを削除することができます。しかし、複数の画像を削除するには?搬送波の複数画像を削除する

ご協力いただければ幸いです。 ありがとうございます。 :)

+1

私の質問を検討するためのモデル団体のようないくつかのコードが –

+0

@AniketShivamTiwariの感謝を示しました。しかし、私はいくつかの異なるモデルでそれを保存していません。 1つのモデルにjsonとして格納されます。私は、複数の画像をアップロードするために[this](https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads)をたどった。 – Vishal

答えて

1

これはほとんどのRailsのやり方ではありませんが、私はこの方法を使っています(他の場所で提案されたコードから変更しました)。これはあなたの単一の画像を削除し

<%= link_to delete_picture_project_path(i: i), method: :delete, confirm: 'Delete?',  dataType: 'script', 'data-message' => 'Are you sure?', 'data-severity' => 'danger', :remote => true do %> 
      <%= image_tag('delete') %> 
     <% end %> 

とルート

resources :projects do 
member do 
    delete 'delete_picture', to: "projects#delete_picture" 
    end 
end 

中:I出力、私は(私は画像の位置です)持っているイメージの私の見解では

def delete_picture 
    @i = params[:i].to_i 

    remain_images = @project.avatars # copy initial avatars 
    delete_image = remain_images.delete_at(@i) # delete the target image 
    delete_image.try(:remove!) # delete image 
    @project.avatars = remain_images # re-assign back 
    @project.save 
end 

複数の画像があります。

0

私は2階の答えに同意しますが、画像が1つのファイルだけ残っている場合、上記の方法は有効ではありません。私は、以下の方法で問題を解決した。(私はモデルの下でそれをやった。)

def delete_picture(index) 
    remain_pictures = self.pictures 
    if remain_pictures.size != 1 
    delete_picture = remain_pictures.delete_at(index) 
    delete_picture.remove! 
    self.pictures = remain_pictures 
    else 
    remove_reports! 
    end 
    save 
end 

@user.delete_picture(params[:index].to_i) 
+0

複数のファイルをアップロードする必要がある場合は、より柔軟なファイルを直接格納するモデルを作成することをお勧めします。 – YaEvan

関連する問題