1

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

  • 使用Devisegem 的用户和身份验证。
  • act_as_follower使用插件的追随者/追随者系统。
  • 用户可以创建的帖子。
  • 每个帖子都可以被喜欢(我有一个供用户和帖子创建的连接表likes)。
  • 每个帖子都可以有一个图像,使用Paperclipgem(我将来可能还会使用 Amazon S3)
  • 每个用户都可以拥有一个头像。
  • 用户之间的消息系统。
  • 各种操作的通知。
  • 用户可以对帖子发表评论。

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

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

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

解决所有这些情况的最佳方法是什么?

编辑:

我用过这个,效果很好。

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

acts_as_follower自动删除每个关注者/关注关系,并Paperclip删除与资源相关的每个图像。

4

1 回答 1

2

在严格依赖于让该用户添加的所有关系中

:dependent => :destroy

例子

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

当使用被破坏时,他的职位也被破坏。您也可以使用销毁回调,但这更复杂。

于 2013-04-07T15:00:01.810 回答