Ich habe ein Release
Modell mit medium
und country
Spalten (unter anderem). Es sollte keine releases
identischen medium
/ country
Kombinationen geben.
Wie würde ich dies als Schienenvalidierung schreiben?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-4
activerecord
rails-activerecord
Jackson Cunningham
quelle
quelle
Antworten:
Mit dieser Option können Sie eine Eindeutigkeitsüberprüfung verwenden
scope
.Außerdem sollten Sie der Datenbank einen eindeutigen Index hinzufügen, um zu verhindern, dass neue Datensätze die Überprüfungen bestehen, wenn sie gleichzeitig überprüft werden, bevor sie geschrieben werden:
quelle
unique
da er nicht erkannt wird. Für diesen Teil habe ich die Antwort unten verwendet.uniqueness
nicht seinunique
. Siehe die verknüpfte Dokumentation. Die Antwort korrigieren.In allen oben genannten Antworten fehlt, wie die Eindeutigkeit mehrerer Attribute in einem Modell überprüft werden kann. Der folgende Code soll erläutern, wie mehrere Attribute in einem Bereich verwendet werden.
Es überprüft die Eindeutigkeit von
country
in allen Zeilen mit den Werten vonmedium
undanother_medium
.Hinweis: Vergessen Sie nicht, einen Index für die obige Spalte hinzuzufügen. Dies gewährleistet einen schnellen Abruf und fügt eine Validierung auf DB-Ebene für eindeutige Datensätze hinzu.
Update: Zum Hinzufügen eines Index beim Erstellen einer Tabelle
quelle
Sie können einen
:scope
Parameter wie folgt an Ihren Validator übergeben:Weitere Beispiele finden Sie in der Dokumentation .
quelle