2015-08-28 114 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