如何删除Rails中用户创建的每个资源?

时间:2013-04-07 14:56:02

标签: ruby-on-rails ruby-on-rails-3

我有一个具有以下功能的应用程序:

  • 使用Devise gem。
  • 的用户和身份验证
  • 使用act_as_follower插件的关注者/关注系统。
  • 可由用户创建的帖子。
  • 可以点赞每个帖子(我有一个用户和帖子的联接表来创建likes)。
  • 每个帖子都可以有一个图像,使用Paperclip gem(我将来也可能会使用Amazon S3)
  • 每个用户都可以拥有头像。
  • 用户之间的消息系统。
  • 各种行动的通知。
  • 用户可以对帖子发表评论。

我希望用户可以选择删除他的帐户。设计已经有了这个动作,但这还不够,因为它只删除我认为的user条目。

我要做的是,删除用户创建的所有帖子,删除帖子的图片。删除每个喜欢,评论,消息(发送/接收),通知和关注者/关注关系,最后删除包括头像图像的用户帐户。简而言之,该操作应删除与要删除的用户相关的user_id字段的每个资源。

我也害怕在单个请求中执行此操作会花费很多时间并且可能会发生错误,例如有一半的帖子被删除或类似的事情。

解决所有这些问题的最佳方法是什么?

编辑:

我用过它并且工作正常。

class User < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end

acts_as_follower会自动删除每个关注者/关注关系,Paperclip也会删除与该资源相关的所有图片。

1 个答案:

答案 0 :(得分:2)

在所有严格依赖于该用户添加

的关系中
:dependent => :destroy

例如

class User < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end

当用途被销毁时,他的帖子也是如此。你也可以使用destroy回调,但这更复杂。