2010-08-31 12 views

Odpowiedz

204

Ponieważ Rails 3, można zrobić:

validates :field, inclusion: { in: [ true, false ] } 
+1

+1 Tak. Podoba mi się, że zapewniają sposób na zrobienie tego w ten sposób. – DJTripleThreat

+2

Otrzymuje to prawo do sprawdzania poprawności, ale komunikat o błędzie nie jest przydatny dla użytkownika końcowego: "pole myfield nie znajduje się na liście" –

+2

Dobrze. Możesz dostosować komunikat o błędzie: http://guides.rubyonrails.org/active_record_validations_callbacks.html#message –

37

Uważam za logiczną dziedzinie trzeba będzie zrobić coś takiego:

validates_inclusion_of :field_name, :in => [true, false] 

ze starszej wersji API: „To ze względu na # wykroju sposób Object obsługuje wartości logicznych fałszywe?.. puste? # => true "

Nie jestem pewien, czy to nadal będzie dobrze dla Rails 3, mam nadzieję, że pomogło!

+0

Lol @ Rails 3. Mogę się założyć, że będzie to ostrzeżenie przez wiele miesięcy. Ok, myślałem, że to jest migth i zgadzasz się. Dzięki! – DJTripleThreat

+0

To prawda dla Rails 4! Wow, false.blank? # => true wydaje się po prostu błędną * odpowiedzią, czego nie oczekiwałbym od Rails. –

8

Kiedy zastosować to, otrzymuję:

Warning z shoulda-dopasowujących:

używasz validate_inclusion_of twierdzić, że wartość logiczną kolumna zezwala na wartości logiczne i uniemożliwia wartości nie-boolowskie. Należy pamiętać, że nie można w pełni przetestować tego parametru, ponieważ kolumny logiczne będą automatycznie konwertować wartości inne niż boolowskie na wartości boolowskie. Dlatego należy rozważyć usunięcie tego testu.

+0

Dla pól, w których wartość null jest dozwolona, ​​czy nadal konwertuje zero do wartości logicznej? – mwfearnley

Powiązane problemy