使用回形针删除图像

问题描述:

我想删除为模型上传的每个单一图像(工作有很多图像),但现在我的代码工作如下:我有三个图像上传到工作中,我想删除一个但当我检查图像的复选框并提交更新操作时,它将删除所有三个图像。使用回形针删除图像

这里是我的工作模式的代码:

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 %> 
+0

是的,我已经使用':allow_destroy'工作模式,并在表单视图我得到这个 ' ' – davelab 2011-06-01 12:55:35

+0

您不需要这些'image_delete'充塞在所有。 ':allow_destroy'会为你破坏记录。我已经更新了适合你的答案中的观点。 – 2011-06-01 13:09:52

+0

你是对的!我改变了我的模型 'accepted_nested_attributes_for:images,:allow_destroy => true,:reject_if => proc {| attributes |属性[ '附着']。空白? }' 和我的看法 ' ' 但我得到这个错误:'未定义的方法“attachment_delete'' – davelab 2011-06-01 13:22:00