2015-08-28 454 views
1

我搞砸了我的數據庫,並試圖挖出我的出路。我已經着手解決這個問題,但我確保如何刪除壞的對象。刪除記錄與零:NilClass

docs = @medical_relationships.map {|x| x.doctor } 

給我的醫生組成的數組

@medical_relationships.map {|x| x.doctor.nil? } 

給我

[false, false, false, false, false, false, false, false, true, true, true, true, false, false, true, true, true, false, false, false, false, false, false, false, false] 

所以那些真正的價值是我需要刪除

我試過@medical_relationships.map {|x| x.doctor.id }用戶但收到的原始錯誤NoMethodError: undefined method id' for nil:NilClass

如何刪除這些不良記錄?

回答

2

@medical_relationships有一些nil醫生,因爲有時x.doctor_id == nil

如果你想選擇從陣列

@medical_relationships.select{|item| item.doctor.present?} 

有效的項目,如果你想從數據庫中刪除

,做這樣的事情

MedicalRelationship.where(doctor_id: nil).destroy_all 

或更新doctor_id值,以正確的醫生

0

可以使用delete_if

docs = @medical_relationships.map {|x| x.doctor }.delete_if {|r| r == nil} 
0

理想情況下這不應該以這種方式來完成。

我想這會發生在您刪除醫生記錄時引用在其他表中被刪除。使用dependent: destroy 選項刪除父記錄時刪除子記錄總是更好。

-1

另一種方式來刪除這些數據

MedicalRelationship.where(doctor_id: nil).delete_all