使用nil删除记录:NilClass

时间:2015-08-28 04:04:20

标签: ruby-on-rails ruby-on-rails-4 activerecord

我搞砸了我的数据库,并试图挖掘出我的出路。我已经注意到这个问题,但我确保如何删除坏对象。

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

如何删除这些不良记录?

4 个答案:

答案 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