2012-04-15 12 views
24

Mam następujący model walidacji polu:Walidacja w celu zapewnienia wyjątkowości, ale ignorowanie pustych wartości?

validates_uniqueness_of :acronym, :scope => [:group_id], :case_sensitive => false 

Problem polega na tym, że to pole jest opcjonalne, a pusty/wartość nil powraca jako skrótem już podjęte. Chcę tylko sprawdzić, czy akronim jest unikatowy, jeśli podano wartość. Czy istnieje sposób aktualizacji tego sprawdzania poprawności, aby miało miejsce tylko wtedy, gdy istnieje rzeczywistej wartości .. nie nil/pusty?

Dzięki

Odpowiedz

53

Tak, istnieją dwie możliwe opcje, które można przekazać do walidacji dla pól opcjonalnych: :allow_blank lub :allow_nil, który pominie walidacji na blank i nil dziedzinach, odpowiednio. Jeśli zmienisz walidację na następującą, powinieneś uzyskać pożądane zachowanie:

validates_uniqueness_of :acronym, :allow_blank => true, :scope => [:group_id], :case_sensitive => false 
+0

Wielkie dzięki! Mój kod jest dużo bardziej wszechstronny. Inne odpowiedzi sugerują użycie: chyba lub: jeśli, ale myślę, że to jest najlepszy sposób. Masz problem z wypuszczaniem: group_id z tablicy? –

+1

Specyfikacja dla tego to 'it {is_expected.to validate_uniqueness_of (: acronym) .scoped_to (: group_id) .case_insensitive.allow_blank}' –

Powiązane problemy