gpt4 book ai didi

ruby-on-rails - Rails Paperclip 如何删除附件?

转载 作者:数据小太阳 更新时间:2023-10-29 06:18:42 27 4
gpt4 key购买 nike

我正在使用 Paperclip (带 Amazon s3)在 Rails 3 上。我想使用更新操作而不替换它来删除现有附件。

我只找到一个这样的例子 here并且无法让它工作,它只是不会删除并且日志中没有任何内容可以说明原因。我想在表单上做这样的事情:

<%- unless @page.new_record? || !@page.image? -%>
<%= f.check_box :image_delete, :label => 'Delete Image' %>
<%- end -%>

(page是模型名,image是附件的属性名)

但我如何检测该复选框,更重要的是,我如何删除图像?感谢您的帮助!

最佳答案

首先,当您在 form_for 中创建一个 check_box(它看起来像您)时,如果选中则表单默认发送 :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

要完成您通过复选框删除图像的方式,或许可以在您的 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”。如果选中该字段,则 Controller 会将 image_delete 更新为“1”,并且在保存用户时,它将检查是否要删除图像。

关于ruby-on-rails - Rails Paperclip 如何删除附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4435826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com