2013-11-20 51 views
3

我有一個Rails 3.2.8應用程序有如下型號:配置文件和報告。簡介有許多報告和報告中屬於檔案Rails的DELETE_ALL不會刪除

如果我嘗試DELETE_ALL的報告,針對特定的個人資料:

Profile.first.reports.delete_all 

而不是刪除報告,它只是將其PROFILE_ID爲零使用SQL類似於:

UPDATE `reports` SET `profile_id` = NULL WHERE `reports`.`profile_id` = 1 AND `reports`.`id` IN (1, 3) 

我在指南中找不到任何關於此內容的信息,這是正確的行爲嗎?如果不是會導致什麼呢?

值得一提的是使用destroy_all工作正常,如不使用破壞和刪除單一報告。

編輯(因爲我不能回答我的問題還沒有):

has_many :reports 

到:

從切換情景模式的關係

has_many :reports, dependent: :delete_all 

有固定這,我猜如果你不指定取決於,它默認爲:nullify,並調用Profile.first.reports.delete_all實際上並沒有刪除,它反而做從屬中指定的是什麼。

除非我失去了一些東西這種行爲是無證的,但至少它的工作原理就像我現在期待。

+2

爲什麼不試試Report.where( 'PROFILE_ID =?',profile.id).destroy_all? – Slawek

回答

0

我已經測試它只是有點,但它應該爲你的情況下工作:

Report.delete_all(profile_id: Profile.first.id) 
2

如果您定義配置文件和報告之間的關聯,然後你的代碼應該處理其他工作,你可以嘗試

Report.where(:profile_id => Profile.first.id).delete_all 
+2

這並不工作,一樣 'Report.delete_all(PROFILE_ID:Profile.first.id)' 但I'l真的想知道爲什麼正常DELETE_ALL不工作 –

+0

因爲在回地面軌道運行東西線 SELECT'profiles'。* FROM'profiles' LIMIT 1 SELECT'reports'。* FROM'reports' WHERE'reports'.'profile_id' = 1 –