rails 3 - 删除用户的所有相关记录 - 防止孤立数据

时间:2011-10-31 12:03:25

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

我有一个简单的博客风格系统,用户可以拥有许多条目。

我尝试通过执行以下操作删除所有用户条目 -

user = User.find_by_id(1)
user.entries.delete_all

这没有成功删除相关条目,它只是将该条目中的user_id设置为nil -

<Entry id: 20, content: "test", user_id: nil, created_at: "2011-10-31 10:26:18", updated_at: "2011-10-31 10:26:18", attachment_id: nil, likes_count: nil, comments_count: nil> 

一些问题,如果你不介意 -

如何确保删除所有没有所有者的条目,并删除相关信息?基于上面的示例 - 我想删除条目及其相关评论

我应该如何最初避免此问题?我认为我的user.entries.delete_all命令是错误的。

1 个答案:

答案 0 :(得分:7)

你知道Rails中destroydelete之间的区别吗?如果您使用destroy Rails将首先实例化要删除的记录,并调用与destroy相关联的所有回调(在关联之前,之后,之后和级联)。因此,您可以创建一个after_destroy回调来销毁所有与用户相关的数据,条目等,或者您声明与:dependent => :destroy的has_many关系,这会自动添加回调以销毁所有相关项目