我有一个简单的博客风格系统,用户可以拥有许多条目。
我尝试通过执行以下操作删除所有用户条目 -
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命令是错误的。
答案 0 :(得分:7)
你知道Rails中destroy
和delete
之间的区别吗?如果您使用destroy
Rails将首先实例化要删除的记录,并调用与destroy
相关联的所有回调(在关联之前,之后,之后和级联)。因此,您可以创建一个after_destroy
回调来销毁所有与用户相关的数据,条目等,或者您声明与:dependent => :destroy
的has_many关系,这会自动添加回调以销毁所有相关项目