Benutzer in meinem System müssen eindeutige E-Mails haben. Wenn ich versuche, einen Benutzer mit einer vorhandenen E-Mail zu erstellen, gibt der Controller einen Fehler aus und setzt alle Änderungen zurück.Update-Modell nach Validierung Fehler
Ich möchte einen Modell-Datensatz aktualisieren, wenn ein Dupe-E-Mail-Versuch unternommen wird. Das Rollback verhindert jedoch, dass Änderungen stattfinden, selbst wenn es sich in einem anderen Datensatz befindet. Ich habe versucht update_attribute
, update_column
und save(validate: false)
aber keiner von ihnen funktioniert.
Wie kann ich den Rollback umgehen und einige Änderungen an einem (separaten) Modell vornehmen?
An welchem Punkt möchten Sie aktualisieren? Ich kann nicht zeigen, wie man tatsächlich einen neuen Datensatz erstellt, wenn E-Mail erforderlich/eindeutig ist, aber die Eindeutigkeit nicht besteht. Aber ich kann mir einen Weg vorstellen, der für die Aktualisierung eines bestehenden Datensatzes funktionieren könnte. Sie können das Fehlerobjekt des Modells verwenden, um zu überprüfen, ob die E-Mail-Validierung fehlgeschlagen ist, und dann Ihr Modell in einer separaten Anforderung aktualisieren. Zum Beispiel könnten Sie 'person.errors [: email]' verwenden, um nach Fehlern im E-Mail-Attribut der Person zu suchen, und wenn das E-Mail-Attribut der Person aktualisiert wurde (z. B.). –
Haben Sie versucht, zu speichern (validate: false)? Nicht speichern (Validierung: falsch). – YTorii
Im Idealfall passiert es in der gleichen Anfrage. Ich würde einen vorhandenen Datensatz bearbeiten und keinen neuen erstellen. Das Rollback scheint alle während der Anforderung vorgenommenen Änderungen rückgängig zu machen. Aber ich werde mich an dieser Stelle mit jeder Lösung zufrieden geben. – Dty