如何有效删除has_many关联?

时间:2014-04-09 23:33:45

标签: ruby-on-rails postgresql ruby-on-rails-4

场景:

#app/model/user.rb
has_many :photos

现在,有时我必须这样做

@user.photos.map(&:destroy) 

这会加载N+1查询。有没有办法使这个可扩展,所以它删除1-2查询?

我正在使用Rails 4.0.0postgres (PostgreSQL) 9.3.2

1 个答案:

答案 0 :(得分:0)

如果您定义foreign key constraint with ON DELETE CASCADE,则删除父行时会自动删除所有依赖行。那你只需要一个命令。

DELETE FROM users WHERE user_id = $user_id;

要删除所有照片并保留用户:

DELETE FROM photos WHERE user_id = $user_id;