Давайте начнем с того, что маршруты станут менее шаткими.
namespace :admin do
resources :products do
resources :images, only: :destroy
end
end
Это создаст вложенный маршрут RESTful DELETE /admin/products/:product_id/images/:id
вместо странного маршрута delete_image_attachment
в стиле RP C. Вы также можете использовать опцию shallow: true
для удаления маршрута, если идентификатор изображения уникален. Проблема с вашим маршрутом заключается в том, что он содержит идентификатор, но находится не в том месте. Когда вы смотрите на:
products/1/delete_image_attachment
Это будет означать, что он удаляет вложение для products/1
. И не изображение с идентификатором 1 - это то, что на самом деле происходит.
Когда ваша итерация просто повторяется по коллекции, а не по ее индексам:
<% @admin_product.images.each do |image| %>
<%= image_tag(image) %>
<%= link_to 'Remove',
admin_product_image_path(@admin_product, image),
method: :delete,
data: { confirm: 'Are you sure?' }
%>
<% end %>
Не выполняйте each |index|
и затем получите предмет с things[index]
в Ruby. Это анти-шаблон, и @admin_product.images.count
создает полностью избегаемый запрос к базе данных. Если вам нужен предмет и его положение, используйте each_with_index
.