Ich verwende Transaktion, um Hotelmodell zu speichern. Hier ist ein Code:Eindeutigkeitsprüfung mit Transaktion
def init
Hotel.transaction do
@hotel.save!
create_related_models
end
end
Ich habe Einzigartigkeit Validierung auf :name
im Hotel. Validierung ist keine Arbeit innerhalb der Transaktion. Wie können datenbankbezogene Validierungen innerhalb einer Transaktion implementiert werden?
Erläuterung warum die Validierung nicht funktioniert.
Wenn ein Benutzer ein Formular abschickt, dauert die Anfrage etwa 10 Sekunden. Wenn er während der Anfrage ein anderes Mal auf Speichern klickt, speichert er zwei Hotels mit demselben Namen (was ein Problem ist). Dies liegt daran, dass die erste Transaktion nicht abgeschlossen wurde, wenn eine andere Transaktion gestartet wurde. Also, wenn ein anderer dort starten ist kein Hotel in der Datenbank so Validierung return true
Ich wollte Sperrmechanismus hinzufügen, aber es erwies sich als zu schwierig. Danke für die Lösung. Zur Zeit habe ich Javascript Button hinzugefügt, aber ich werde auch Ihre erste Lösung implementieren (Constrain und Fehler behandeln) –