Angenommen, Sie haben User has_many Books
. Jedes Buch hat ein Namensfeld.Wie kann die Eindeutigkeit eines Feldes validiert werden, ohne Rails zu speichern?
Der Benutzer gibt seine Bücher ein und es wird der App als ein Array von Namen übermittelt. Das Array von Namen ersetzt alle vorhandenen Bücher.
Wenn die Aktualisierung fehlschlägt, sollten die Bücher nicht geändert werden.
class Book
belongs_to :user
validates_uniquness_of :name, scope: [:user]
Wie überprüft man die Gültigkeit jedes Buches ohne zu speichern?
Zum Beispiel:
['Rails Guide', 'Javascript for Dummies']
würde gültig sein.
['Javascript for Dummies', 'Javascript for Dummies']
wäre nicht gültig.
params[:books].each{| b | Book.new(b).valid? }
wird nicht funktionieren, weil das Buch gespeichert werden muss, um die Einzigartigkeit zu erhalten.
Mongoid
Sie benötigen auch eine Eindeutigkeitseinschränkung in der Datenbank und dann müssen Sie auch 'ActiveRecord :: RecordNotUnique' abfangen. –
Dies ist ein guter Weg, es zu tun, aber Mongo hat keine Transaktionen. –