2014-04-14 144 views
0

这里是一个例子...我有一个用户表引用首选项。首选项表有一个user_id。当我删除用户时,我想要删除首选项表中的记录。然而,使用的模型belongs_tohas_many关联方法,我得到的数据库本次活动:Rails的ActiveRecord删除记录,关联的记录一次删除一个

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方法,但我想看看是否有一个更优雅的方式来做到这一点...

+0

您需要逐个处理每个Preference实例,以便在每个首选项记录上调用destroy回调(其他依赖关系::在首选模型上定义的destroy)。 – MrYoshiji

+1

你的用户模型有'has_many:users'?这是错字吗? – Pavan

+0

对不起,这是一个错误的线程,而不是代码... –

回答

1

你行你的dependent: :delete_all选项,而不是dependent: :destroy

has_many :preferences, dependent: :delete_all 

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

+0

这就是它!多谢兄弟。 –