2016-05-24 13 views
1

Ich baue eine kleine App mit Rails 4.2.6. Angenommen, ich habe die folgenden Klassen:Rails: HT-Schalter Parent of Child-Objekte beim Löschen von Eltern?

... mit Blick erstellen, anzeigen, aktualisieren und zerstören sie sich. Ich habe dann mehrere Caseworkers erstellen und ihnen mehrere Fälle zuweisen.

Derzeit, wenn ich einen Sozialarbeiter löschen versuchen, werde ich eine Fehlermeldung erhalten:

Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails 

Kein Problem, das ist zu erwarten.

In einigem CMSes aber, wenn ein Benutzer versucht, ein Objekt mit einem solchen Abhängigkeiten zu zerstören, können Sie sie mit der Option stellen die Objekte in einem anderen Elternteil zuzuordnen, oder sie zu zerstören. Gibt es in Rails einen Standard, um diese Funktionalität anzubieten? Ansonsten scheint es, dass ich eine before_destroy Klausel in den Caseworker Controller setzen muss ... ist das wahr? Ich habe keine Angst, eine solche Methode zu schreiben, wenn es sein muss, aber ich möchte dieses Rad nicht neu erfinden, wenn es für mich da ist, irgendwo zu verwenden.

Antwort

2

Sie können einen der dependent: :destroy oder dependent: :nullify zu der has_many-Anweisung hinzufügen, je nachdem, ob die Kinder gelöscht oder das Feld für den Fremdschlüssel gelöscht werden soll.

Zum Beispiel, um die Fälle löschen zu einem Sozialarbeiter gehören, gelöscht werden Sie nutzen könnten:

class Caseworker < ActiveRecord::Base 
    has_many :cases, dependent: :destroy 
end 

Mein Wissen Rails haben keine Möglichkeit, Kinder zu einem anderen Elternteil neu zuweisen - man müßte Code schreiben um das selbst zu tun.