首先,当你在一个表单中创建一个复选框时(看起来你就是这样),默认情况下,表单应该发送:image_delete,如果选中,则为"1",如果未选中,则为"0".方法声明如下所示:
def check_box(method, options = {}, checked_value = "1", unchecked_value = "0")
这表明,如果愿意,可以指定其他值,但这当然是可选的.
其次,手动删除附件而不删除其所附加到的模型实例的调用是:
@page.image.destroy #Will remove the attachment and save the model
@page.image.clear #Will queue the attachment to be deleted
为了实现通过复选框删除图像的方法,可以在页面模型中添加如下内容:
class Page < ActiveRecord::Base
has_attached_file :image
before_save :destroy_image?
def image_delete
@image_delete ||= "0"
end
def image_delete=(value)
@image_delete = value
end
private
def destroy_image?
self.image.clear if @image_delete == "1"
end
end
这样,当您创建表单并添加:image_delete复选框时,它将从用户实例加载默认值"0".如果选中该字段,则控制器会将图像_delete更新为"1",并在保存用户时判断是否要删除图像.