0

挑战(停用):

在 Rails 4 中使用 Devise 拥有一个社交媒体类型的应用程序。我正在寻找一种从系统中删除用户的好方法。由于 Facebook 允许用户重新激活那里的帐户,我现在已经使用

user.deactivated

布尔值,因此实际上并未从数据库中删除记录。

删除未确认的用户

使用 rake 任务,我现在可以过滤所有 7 天未确认帐户的用户,这些用户我想真正从数据库中删除。由于用户在没有确认的情况下无法对我的应用程序执行任何操作,因此我认为他们“丢失”了注册。

我想知道从数据库中真正删除这些用户的最佳策略是什么?

由于每个用户都有自己的个人资料/帐户,从系统中删除所有内容的最佳方法是什么?我在用着:

belongs_to  :user, :dependent => :destroy

在配置文件/帐户模型中,从数据库中删除用户应该删除所有其他关系。这是最好的方法吗?有什么需要考虑的会破坏系统的事情吗?

4

1 回答 1

1

正如您已经开始这样做的那样,在模型之间放置依赖关系是一种好方法,这将删除链接的所有内容destroy(不要混淆delete它执行没有 Rails 回调的 SQL 查询)。虽然我在最近的项目中开始避免使用这种技术。

我对数据库清洁度有点老派,所以我们通常也使用gems来强制 FK 完整性。它在删除对象时增加了另一层维护(因为它会在触发时抛出 SQL 错误),但我发现它更可靠,然后是模型中的一行。此外,我们通常通过为模型提供在所有依赖对象上custom_destroy执行的方法来克服这种增加的复杂性。delete

def custom_destroy
   self.class.transaction do 
     child_objects.delete_all
     some_other_child_objects.delete_all
     delete
   end
end

这提供了速度优势,因为对 10 个子对象使用 destroy_all 将执行 10 个 SQL 查询(+所有回调),另一方面,此方法将只执行一个查询。

我们很少需要清理旧的不需要的数据(过期项目),我们为此使用 rake 任务。如果您在 Heroku 上,只需使用 Heroku 调度程序,如果您在 VPS/专用机器上,我建议在使用gem使用,它也应该与 Capistrano 有良好的集成。

于 2013-11-02T11:30:05.417 回答