Rails 3. before_destroy Validierung, um das Löschen von übergeordneten Datensätzen zu verhindern

8

Ich habe Sendungen und Rechnungen.

Rechnung gehört zum Versand
Sendung hat eine Rechnung

Wenn die Sendung eine Rechnung hat, sollte die Sendung nicht gelöscht werden können. Ich muss dies in den Modellen einrichten, weil ich ActiveAdmin verwende.

Also habe ich das in sending.rb

gemacht %Vor%

Aber ich bekomme nur eine gelbe Nachricht mit der Nachricht "Sendung kann nicht gelöscht werden", aber sie wurde tatsächlich gelöscht.

Wie kann ich verhindern, dass die Sendung gelöscht wird?

    
leonel 11.01.2012, 19:23
quelle

4 Antworten

23

Der before_destroy -Rückruf benötigt einen Wahr / Falsch-Wert, um zu bestimmen, ob er ausgeführt werden soll oder nicht.

Fügen Sie return false zu Ihrem check_for_invoice wie folgt hinzu:

%Vor%     
Paul Simpson 11.01.2012, 19:34
quelle
4

Meine 2 Cent in shipment.rb

%Vor%

Ich denke, dass es funktioniert, sah ich diese Lösung in einem anderen Thread. Ich versuche gerade jetzt in meinen Modellen.

    
josias 12.02.2013 12:27
quelle
3

Aus den Dokumenten :

  

Wenn ein before_ * Callback false zurückgibt, werden alle späteren Callbacks und die zugehörige Aktion abgebrochen.

Versuchen Sie es also:

%Vor%     
maprihoda 11.01.2012 19:28
quelle
1

Für Schienen 4:

%Vor%

wird es tun. Wenn Sie eine Ausnahme anstelle eines Fehlers wünschen, verwenden Sie :restrict_with_exception . Weitere Informationen finden Sie unter die entsprechende api docs-Seite .

For Rails 3 (vielleicht auch früher) versuchen:

%Vor%     
nitsas 06.04.2016 10:04
quelle