2017-12-13 5 views
1

Wir haben eine accepts_nested_attributes_for mit einer dependent: destroy, die gut mit der _destroy param arg funktioniert.Warum scheitert ein Kindmodell bei der Validierung von "accept_nested_attributes_for"?

Wir haben eine Validierung für das Kind hinzugefügt, und das funktioniert wie erwartet.

Aber wenn wir die beiden kombinieren, löst das Speichern des Parent einen unbehandelten Fehler aus, anstatt false zurückzugeben.

class Foo < ActiveRecord::Base 
    accepts_nested_attributes_for :bars, allow_destroy: true 
    ... 
end 

class Bar < ActiveRecord::Base 
    before_destroy :can_do? 

    def can_do? 
    unless yeah_sure 
     errors.add(:base, I18n.t("the.translation")) 
     false 
    end 
    end 
    ... 
end 

Die bar_spec Tests yeah_sure in beiden Fällen mit Fehlern leer oder vorhanden ist (und die korrekte Nachricht ist in dort).

Wenn ich durch den Schienenbereich gegangen bin, gibt es 3 Ebenen von Catch, Rollback/Cleanup und Freigabe in active_support und Transaktion.

Ich habe auch versucht, in der Steuerung zu retten, beide Methoden-Ebene und einen Anfang Block, und keiner von denen gefangen den Fehler, der ist seltsam.

Irgendeine Idee, warum foo.save einen Fehler wirft, anstatt falsch zurückzugeben?

Rails 4.2.10

+0

Ihre 'Bar'-Einheit ist das Kind von' Foo', nicht Elternteil. Bitte fügen Sie die Log-Trace zum leichteren Verständnis hinzu. – yeuem1vannam

Antwort

0

können Sie die inverse_of verwenden, um die Validierung auf verschachtelte Attribute laufen.

Sie können die Attribute auch unter Verwendung von reject_if block zurückweisen, bitte beachten Sie die folgenden link.

+0

Wir haben 'invers_of' versucht und es wurde nicht aufgelöst. Wir wollen Hashes nicht ignorieren, wir wollen untergeordnete Datensätze löschen, damit 'reject_if' nicht hilft. – blu

Verwandte Themen