首先,当您在form_for中创建一个check_box(看起来像您一样)时,默认情况下,表单应将:image_delete发送为“ 1”(如果已选中)和“ 0”(如果未选中)。方法声明如下所示:
def check_box(method, options = {}, checked_value = "1", unchecked_value = "0")
这表明您可以根据需要分配其他值,但这当然是可选的。
其次,手动删除附件而不删除附件所连接的模型实例的调用是:
@page.image.destroy
@page.image.clear
为了完成通过复选框删除图像的方式,也许可以将以下内容添加到Page模型中:
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复选框时,它将从User实例中加载默认值“ 0”。如果选中了该字段,则控制器会将image_delete更新为“ 1”,并且在保存用户时,它将检查是否要删除图像。
has_attached_file
,或者Page是否具有名为image的附件?