2014-04-14 167 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

這就是它!多謝兄弟。 –