雖然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
塊。此複選框必須使用semantic_fields_for
(或由formtastic提供的其他嵌套屬性方法之一)嵌套在<attachment_name>_attributes
之內。
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
當存在附件時,表單現在應該顯示一個刪除複選框。選中此複選框並提交有效表單應該刪除附件。
來源:https://github.com/activeadmin/activeadmin/wiki/Deleting-Paperclip-Attachments-with-ActiveAdmin
你忘了真正刪除與standalone_background.clear附件 – kars7e 2013-09-02 22:16:49