Обратимое удаление для больших двоичных объектов и вложений Rails Active Storage

Может ли кто-нибудь помочь в реализации мягкого удаления для больших двоичных объектов и вложений в хранилище Rails Active.

Я использую гем act_as_paranoid для других моделей, но как использовать его в больших двоичных объектах и ​​вложениях Active Storage.

Как перезаписать эту модель?

Заранее спасибо.


person Saranya    schedule 16.10.2020    source источник
comment
Проверьте это - github.com/ActsAsParanoid/acts_as_paranoid/issues/103   -  person Aarthi    schedule 16.10.2020
comment
papertrail gem — еще один вариант, он ведет учет всех изменений и возвращается к предыдущей версии, а поскольку удаление рассматривается как изменение, вы возвращаетесь к версии до того, как она была удалена. Есть приемы, которые вы можете использовать, чтобы относительно быстро получить бумажный журнал для всех моделей.   -  person Nuclearman    schedule 20.10.2020
comment
Чтобы использовать papertrail в большом двоичном объекте и вложении, нам нужно перезаписать большой двоичный объект активного хранилища, верно? Как перезаписать модель больших двоичных объектов и вложений?   -  person Saranya    schedule 21.10.2020


Ответы (1)


Итак, у меня есть возможное решение, которое, кажется, работает. Я был бы признателен за любой отзыв, поскольку он не кажется особенно надежным.

В моем приложении Employees есть files, и я хочу иметь возможность архивировать сотрудника, а затем возвращать его файлы при восстановлении записи сотрудника.

#/models/employee.rb
class Employee < ApplicationRecord
acts_as_paranoid  

def destroy
    @employee = Employee.find(params[:id])
    
    #create a temporary employee object to attach all files to.
    @temp_employee = Employee.new(name:"temp", position: "temp")

    #attach each of the original employee's files to the temp employee
    @employee.files.each do |f|
      @temp_employee.files.attach(f.blob)
    end

    #soft delete the employee
    @employee.destroy
    
    #re-attach all the files back 
    @temp_employee.files.each do |n|
      @employee.files.attach(n.blob)
    end
    
    @employee.save! 
   #employee is soft deleted, and the files are attached to the record
end
end
person downtownott    schedule 14.04.2021