
Все детально розписано тут, раджу почитати. Я ж розгляну свою реалізацію на прикладі проекту, в якому є модель tovar, для якої потрібно знищувати картинку при потребі
Усю магію по активації Ajax'у виконує директива remote: true. У view опишемо ссилку для знищення запису
1 2 3 4 5 6 7 |
<div class='tovar_image'> <%= image_tag @filename, width: '350' %> <% if @show_delete %> <%= link_to 'Delete',admin_tovar_file_path(@tovar), remote: true, method: :delete, data: {confirm: 'Знищити файл?'} %> <% end %> </div> |
В контролері метод edit буде мати вигляд
1 2 3 4 5 6 7 8 9 10 |
def edit @tovar = Tovar.find_by(id: params[:id]) if @tovar.nil? flash[:error] = 'Товар не знайдено' redirect_to admin_tovars_path else @filename = get_filename params[:id] @show_delete = (is_file? params[:id]) ? true : false end end |
Тут я написав допоміжні методи
1 2 3 4 5 6 7 8 9 10 |
def is_file? id res = false tovar=Tovar.find_by(id: id) if (tovar.present?) and (tovar.filename.present?) if File.file?(Rails.root.join('public/images', @path_images,"#{id}_#{tovar.filename}")) res = true end end res end |
Редагуємо config/routes.rb, біндимо знищення на метод file_destroy
1 2 3 |
resources :tovars do delete "file" => "tovars#file_destroy" end |
Описуємо в контролері сам метод
1 2 3 4 5 6 7 8 9 10 |
def file_destroy file_delete params[:tovar_id] @tovar=Tovar.find(params[:tovar_id]) respond_to do |format| format.html { redirect_to admin_tovar_path(params[:id]) } format.js {} format.json end end |
Після знищення файлу, потрібно сховати саму картинку на веб-сторінці, для цього створюємо в'юху file_destroy.js.erb, яка файтично створює javascript-код, який буде відісланий клієнту та виконаний
1 |
$(".tovar_image").hide(); |