ich in das gleiche Problem lief und hier ist, was ich habe, um herauszufinden, getan, was los ist ...
Zuerst für die Klasse des Objekts ich zu zerstören bin versucht, ich das Bild lief Sie heraus, was alle Verbände eingestellt, wie dependent: :destroy
:
ary = Klass.reflect_on_all_associations
.select { |a| a.options[:dependent] == :destroy }
.map(&:name)
Dann rief ich jedes der in ary
auf meinem Objekt mit dem Namen Verbände und sammelte die Ergebnisse. Dies schränkt die Assoziation Namen nur diejenigen, die tatsächlich abhängige Objekte haben:
ary.select! { |a| obj.send(a).any? }
Dann kann ich versuchen, jedes der Objekte durch diese Assoziation Namen zurückgegeben zu zerstören:
destroy_me = obj.send(ary[0]).first
destroy_me.destroy
Ich hatte nur ein Objekt so Das obige war genug, um die Zerstörung zum Scheitern zu bringen. Ich konnte dann auf dem Fehler auf dem Objekt suchen, die zerstören fehlgeschlagen:
destroy_me.errors
Und das ist, wo ich endlich den Fehler sah, dass die Zerstörung verursacht wurde zum Scheitern verurteilt. Von dort war es eine einfache Sache der Programmierung (SMOP), um das Problem zu beheben.
In meinem Fall gab es einen before_destroy
Rückruf, der verhindert, dass das Zerstören an einer meiner abhängigen Objektverknüpfungen funktioniert. Um das Debuggen in der Zukunft einfacher zu machen, habe ich beschlossen, einen Fehler in der Rails-Protokollierung bei fehlgeschlagenen Callbacks zu protokollieren (zusätzlich zum Hinzufügen der Fehlermeldung zu errors.base
).
Welche Schienen sind Sie? Bitte posten Sie Ihr Personenmodell. – zeantsoi