Mam Release
model z medium
i country
kolumny (między innymi). Nie powinno być takich releases
wspólnych medium
/ country
kombinacji.
Jak napisałbym to jako walidację szyn?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-4
activerecord
rails-activerecord
Jackson Cunningham
źródło
źródło
Odpowiedzi:
Z opcją możesz skorzystać z weryfikacji unikalności
scope
.Powinieneś także dodać unikalny indeks do bazy danych, aby zapobiec przejściu walidacji przez nowe rekordy, gdy są sprawdzane w tym samym czasie przed zapisaniem:
źródło
unique
ponieważ nie jest rozpoznawany. W tej części użyłem odpowiedzi poniżej.uniqueness
, nieunique
. Zobacz załączoną dokumentację. Naprawianie odpowiedzi.We wszystkich powyższych odpowiedziach brakuje sposobu sprawdzenia wyjątkowości wielu atrybutów w modelu. Poniższy kod ma na celu wyjaśnienie, jak używać wielu atrybutów w zakresie.
Sprawdza niepowtarzalność
country
we wszystkich wierszach z wartościamimedium
ianother_medium
.Uwaga: Nie zapomnij dodać indeksu do powyższej kolumny, zapewnia to szybkie wyszukiwanie i dodaje walidację na poziomie bazy danych dla unikalnych rekordów.
Aktualizacja: do dodawania indeksu podczas tworzenia tabeli
źródło
Możesz przekazać
:scope
parametr do swojego walidatora w następujący sposób:Więcej przykładów znajdziesz w dokumentacji .
źródło