Rails ActiveRecord删除记录,一次删除一个关联记录

时间:2014-04-14 16:32:44

标签: mysql ruby-on-rails

这是一个例子......我有一个引用首选项的用户表。首选项表具有user_id。当我删除用户时,我也想删除首选项表中的记录。但是,使用模型中的belongs_tohas_many关联方法,我在数据库中获得此​​活动:

  preference Load (0.4ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`user_id` = 2
  SQL (1.3ms)  DELETE FROM `preferences` WHERE `preferences`.`id` = 2
  SQL (0.2ms)  DELETE FROM `preferences` WHERE `preferences`.`id` = 6
  SQL (0.1ms)  DELETE FROM `preferences` WHERE `preferences`.`id` = 16
  SQL (0.2ms)  DELETE FROM `preferences` WHERE `preferences`.`id` = 28
  SQL (0.2ms)  DELETE FROM `preferences` WHERE `preferences`.`id` = 34
  SQL (0.1ms)  DELETE FROM `preferences` WHERE `preferences`.`id` = 44
  userAccount Load (0.3ms)  SELECT `user_accounts`.* FROM `user_accounts` WHERE `user_accounts`.`user_id` = 2
  SQL (0.2ms)  DELETE FROM `user_accounts` WHERE `user_accounts`.`id` = 2

是否有正确的方法可以使用DELETE FROM preferences WHERE user_id = xxxx删除记录?我想这样做,因为如果首选项有数百万行,则可能是一个冗长的查询。

# User model
has_many :preferences, dependent: :destroy

# Preferences model
belongs_to :user

我可以覆盖destroy方法,但我想知道是否有更优雅的方法来做到这一点......

1 个答案:

答案 0 :(得分:1)

您可以使用dependent: :delete_all选项,而不是dependent: :destroy

has_many :preferences, dependent: :delete_all

这将执行delete from preferences where user_id = {user_id}