Несмотря на то, что accepts_nested_attributes_for(:foo, allow_destroy: true)
работает только с ассоциациями ActiveRecord, такими как belongs_to
, мы можем позаимствовать из его дизайна аналогичный способ удаления вложенных скрепок.
(Чтобы понять, как работают вложенные атрибуты вRails see 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
flag <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
Ваша форма должна теперь отображать флажок удаления при наличии вложения. Установите этот флажок и отправьте действительный form должен удалить вложение.
Источник: https://github.com/activeadmin/activeadmin/wiki/Deleting-Paperclip-Attachments-with-ActiveAdmin