我搞砸了我的数据库,并试图挖掘出我的出路。我已经注意到这个问题,但我确保如何删除坏对象。
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
如何删除这些不良记录?
答案 0 :(得分:2)
@medical_relationships
有一些nil
医生,因为有时会x.doctor_id == nil
如果要从数组中选择有效的项目
@medical_relationships.select{|item| item.doctor.present?}
如果你想从数据库中删除,可以这样做
MedicalRelationship.where(doctor_id: nil).destroy_all
或将doctor_id值更新为正确的医生
答案 1 :(得分:0)
您可以使用delete_if
docs = @medical_relationships.map {|x| x.doctor }.delete_if {|r| r == nil}
答案 2 :(得分:0)
理想情况下,这不应该以这种方式完成。
我猜这种情况会在您删除其他表中删除引用的医生记录时发生。使用dependent: destroy
总是更好
删除父记录时删除子记录的选项。
答案 3 :(得分:-1)
通过
删除该数据的另一种方法 MedicalRelationship.where(doctor_id: nil).delete_all