使用回形针删除图像
问题描述:
我想删除为模型上传的每个单一图像(工作有很多图像),但现在我的代码工作如下:我有三个图像上传到工作中,我想删除一个但当我检查图像的复选框并提交更新操作时,它将删除所有三个图像。使用回形针删除图像
这里是我的工作模式的代码:
before_save :destroy_image?
belongs_to :category
has_many :images, :as => :assetable, :class_name => "Work::Image", :dependent => :destroy
accepts_nested_attributes_for :images, :reject_if => proc { |attributes| attributes['attachment'].blank? }
def image_delete
@image_delete ||= "0"
end
def image_delete=(value)
@image_delete = value
end
private
def destroy_image?
self.images.clear if @image_delete == "1"
end
end
class Work::Image < Asset
has_attached_file :attachment, :styles => {:small => "200x150>", :large => "400x300>"},
:url => "/uploads/works/:id/:style/:basename.:extension",
:path => ":rails_root/public/uploads/works/:id/:style/:basename.:extension"
end
我认为问题是,删除所有图像
self.images.clear if @image_delete == "1"
,但我不知道如何解决它。我希望在你的帮助下。
答
您应该使用accepts_nested_attributes_for
的:allow_destroy
选项。
而且在你的表格是这样的:
<% @work.images.each do |image| %>
<%= f.fields_for :images, image do |image_fields| %>
<%= image_tag image.url(:small) %>
<%= image_fields.check_box :_destroy %>
<% end %>
<% end %>
是的,我已经使用':allow_destroy'工作模式,并在表单视图我得到这个 ' ' – davelab 2011-06-01 12:55:35
您不需要这些'image_delete'充塞在所有。 ':allow_destroy'会为你破坏记录。我已经更新了适合你的答案中的观点。 – 2011-06-01 13:09:52
你是对的!我改变了我的模型 'accepted_nested_attributes_for:images,:allow_destroy => true,:reject_if => proc {| attributes |属性[ '附着']。空白? }' 和我的看法 ' ' 但我得到这个错误:'未定义的方法“attachment_delete'' – davelab 2011-06-01 13:22:00