【发布时间】:2026-02-08 16:05:02
【问题描述】:
这是一个示例...我有一个引用首选项的用户表。首选项表有一个 user_id。当我删除一个用户时,我也想删除首选项表中的记录。但是,使用模型中的belongs_to 和has_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 方法,但我想看看是否有更优雅的方法来做到这一点......
【问题讨论】:
-
您需要一个一个处理每个 Preference 实例,以便在每个 Preference 记录上调用销毁回调(其他依赖::destroy 在 Preference 模型上定义)。
-
你的用户模型有
has_many :users?是错字吗? -
是的,抱歉,这是线程中的错字,而不是代码...
标签: mysql ruby-on-rails