Хотя accepts_nested_attributes_for(:foo, allow_destroy: true)
работает только с ActiveRecord ассоциаций как belongs_to
мы можем позаимствовать из своего проекта, чтобы аналогичная работа была выполнена с удалением скрепки.
(Для того, чтобы понять, как вложенные атрибуты работают в Rails см http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html).
Добавить метод <attachment_name>_attributes=
писатель, как показано ниже на модель, которая уже использует has_attached_file
:
has_attached_file :standalone_background
def standalone_background_attributes=(attributes)
# Marks the attachment for destruction on next save,
# if the attributes hash contains a _destroy flag
# and a new file was not uploaded at the same time:
if has_destroy_flag?(attributes) && !standalone_background.dirty?
standalone_background.clear
end
end
Метод <attachment_name>_attributes=
называет Paperclip::Attachment#clear
, чтобы отметить прикрепление для разрушения при следующей сохранении модели.
Далее откройте существующий app/admin/your_model_here.rb
файла (используйте правильный путь к файлу для вашего приложения) и настройка сильных параметры, чтобы разрешить вложенный атрибут _destroy
флага на <attachment_name>_attributes
:
ActiveAdmin.register YourModelHere do
permit_params :name, :subdomain,
:standalone_background,
standalone_background_attributes: [:_destroy]
В том же файл, добавьте вложенную _destroy
флажка в блок ActiveAdmin form
. Этот флажок должен быть вложен в <attachment_name>_attributes
, используя semantic_fields_for
(или один из других методов вложенных атрибутов, предоставляемых formtastic).
form :html => { :enctype => "multipart/form-data"} do |f|
f.inputs "Details" do
...
end
f.inputs "General Customisation" do
...
if f.object.standalone_background.present?
f.semantic_fields_for :standalone_background_attributes do |fields|
fields.input :_destroy, as: :boolean, label: 'Delete?'
end
end
end
end
Ваша форма должна теперь показывать флажок delete, когда есть приложение. Проверка этого флажка и отправка правильной формы должны удалить вложение.
Источник: https://github.com/activeadmin/activeadmin/wiki/Deleting-Paperclip-Attachments-with-ActiveAdmin
Вы забыли фактически удалить вложение с standalone_background.clear – kars7e