2014-04-09 102 views
0

場景:

#app/model/user.rb 
has_many :photos 

現在,有時我不得不這樣做如何有效地刪除has_many關聯?

@user.photos.map(&:destroy) 

這會將N+1查詢。有什麼辦法可以使這個可擴展的,所以它在1-2查詢刪除?我使用Rails 4.0.0postgres (PostgreSQL) 9.3.2

回答

0

如果定義foreign key constraint with ON DELETE CASCADE

,刪除父行,當所有取決於行將被自動刪除。那麼你只需要一個命令。

DELETE FROM users WHERE user_id = $user_id; 

只是刪除所有照片和保持用戶:

DELETE FROM photos WHERE user_id = $user_id; 
+0

感謝。但我不想刪除'user'記錄。 '@ user.photos.map(&:destroy)'意味着'刪除用戶的所有照片行',但'不是用戶'。當**用戶想要刪除所有這些照片,但不是其整個配置文件時,會出現這種情況** –

+0

@PititoshPiplewar。我懂了。我添加了一個命令。 –

+0

哇,這太簡單,很聰明的把戲。 –