我正在寻找一些关于如何更好地处理用户删除的方向。理想情况下,在archive!
中列无效之前,用户数据将被复制并存储到新表中。在归档用户数据之前,设置模型和迁移以克隆用户数据的最佳方法是什么?
在users_controller中,destroy方法很简单
def destroy
load_user
@user.archive!
flash[:notice] = 'User deleted'
redirect_to action: :index
...
end
档案!用户模型中的操作将使所有用户列无效,并在删除用户时将后缀添加到用户电子邮件的末尾。
def archive!
self.is_archived = true
self.email = "#{self.email}.archived#{Time.now.to_i}"
self.encrypted_password = nil
self.password_salt = nil
self.session_token = nil
self.perishable_token = nil
self.device_id = nil
self.verification_key = nil
self.save!
self.update_column(:api_key, nil)
UserGroup.delete_all(:user_id => self.id)
end
答案 0 :(得分:1)
执行此操作的一种方法是简单地创建一个新表 - ArchivedUsers
,其中包含与Users
相同的所有属性以及您想要的任何其他信息(例如deleted_at
)
然后您的archive!
方法可能如下所示:
def archive!
additional_attributes = {
deleted_at: Time.now.to_i
}
if ArchivedUser.create!(self.attributes.merge(additional_attributes))
self.destroy!
else
# handle the ArchivedUser not being created properly
end
end