Rails和回形针,删除记录但不删除附件

Min*_*ure 6 ruby ruby-on-rails image-processing callback paperclip

我通常使用rails和paperclip来保存图像.

销毁附件的记录时,附件也会从文件系统中删除.

99%的时间这是正确的操作,但是有一种情况我需要附件保留在系统中,即使删除了db记录.

我想知道是否有人知道如何做到这一点.

我已经尝试在销毁记录之前通过update_attribute将附件字段设置为nil,但update_attribute也删除了该文件.

一种方法是忽略所有回调,但是需要一些其他回调,这似乎有点太多了.任何人都知道更好的方法......

干杯.

rif*_*aff 3

您可能想看看Attachment#assign(当您这样做时调用object.attachment = new_attachment)是如何在回形针中实现的。基本上,它进行一些设置,然后调用Attachment#clear,然后保存新文件。

Attachment#clear 将旧文件放入删除队列中,当您再次调用 save 时会处理该队列,您想要的只是避免调用clear,您可以通过编写一个跳过该行的新分配方法或通过猴子来实现打补丁#clear,使其成为无操作。理论上,您可以在您希望发生这种情况的实例上进行猴子修补,但在我看来,您可能希望在整个项目中都这样做。

或者您可以清除保存处理队列的实例变量。该变量没有访问器,但是执行以下操作应该很简单instance_variable_get