使用Devise在Rails 4中使用社交媒体类型应用程序。 我正在寻找一种从系统中删除用户的好方法。由于Facebook允许用户重新激活帐户,我现在已经使用
实现了此功能user.deactivated
布尔值,因此实际上不会从数据库中删除记录。
使用rake任务我现在能够过滤所有尚未确认帐户7天的用户,我想真正从数据库中删除这些用户。由于用户在没有确认的情况下无法对我的申请做任何事情,我认为他们“丢失”了注册。
我想知道从数据库中删除这些用户的最佳策略是什么?
由于每个用户都有自己的个人资料/帐户,从系统中删除所有内容的最佳方法是什么?我正在使用:
belongs_to :user, :dependent => :destroy
在个人资料/帐户模型中,因此从数据库中删除用户应该删除所有其他关系。这是最好的方式吗?任何需要考虑的因素都会破坏系统?
答案 0 :(得分:1)
正如您已经开始这样,在模型之间放置依赖关系是一种很好的方法,这将删除destroy
上链接的所有内容(不要与delete
混淆它执行SQL查询而不使用Rails回调)。虽然我在最近的项目中开始避免使用这种技术。
我是一个关于数据库清洁度的老派,所以我们通常也使用gems来强制执行FK完整性。它在删除对象时添加了另一层维护(因为它会在触发时抛出SQL错误),但我发现它更可靠,然后是模型中的单行。此外,我们通常通过为所有依赖对象执行custom_destroy
的{{1}}方法提供模型来克服这种增加的复杂性。
delete
这提供了速度的优势,因为在10个子对象上使用destroy_all将执行10个SQL查询(+所有回调),另一方面,此方法将只执行一个查询。
我们很少需要清理旧的不需要的数据(过期的项目),我们使用rake任务。如果您使用的是Heroku,只需使用Heroku调度程序,如果您使用的是VPS /专用机器,我建议使用whenever gem,它也应该与Capistrano有很好的集成。