2011-09-20 10 views
7

do inicjowania Mam ogromny COUNTRY_CODES hash, w formacie:Walidacja modelu pola: jeśli wartość jest równa klucz w hash

{ :us => "United States, :de => "Germany" } 

W moim modelu chcę potwierdzić, że wprowadzona wartość jest:

  • obecny
  • kluczowym mojego kod kraju hash

Jak dołączyć do tego?

nie mogę użyć:

validates :country, :presence => true, 
        :inclusion => { :in => COUNTRY_CODES } 

próbowałam niestandardowych weryfikatorów, ale pojawiają się błędy metoda, gdy wartość jest zerowa, np kiedy próbuję użyć value.to_sym, co powoduje, że sprawdzam poprawność walidatora i staje się bałaganiarski.

Próba znalezienia najbardziej SUCHEGO i wydajnego sposobu wykonania tej czynności.

Odpowiedz

14

Należy zebrać klucze (symbole) COUNTRY_CODES jako łańcuchy i zatwierdzić ich uwzględnienie. Więc użyj:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) } 
+1

FYI, domyślnie do włączenia jest: allow_nil => false, nie ma potrzeby obecności sprawdzania poprawności. – efoo

4

Wypróbuj COUNTRY_CODES.keys, jeśli chcesz sprawdzić tylko za pomocą klawiszy w haszdzie.

Powiązane problemy