2011-09-20 19 views
7

En un inicializador Tengo un gran COUNTRY_CODES hachís, con el formato:campo del modelo Validar: si el valor es igual a una clave en un hash

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

En mi modelo que desea validar que el valor introducido es:

  • presente
  • una llave de mi código de país de hash

¿Cómo apporach esto?

no puedo usar:

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

He intentado validadores personalizados, pero me da errores de método cuando el valor es nulo, por ejemplo, cuando trato de usar value.to_sym, lo que hace que valide el validador y se vuelve desordenado.

Tratando de encontrar la manera más SECA y eficiente de hacer esto.

Respuesta

14

Debe recopilar las claves COUNTRY_CODES (símbolos) como cadenas y validar la inclusión. Así que use:

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

FYI, el valor predeterminado para la inclusión es: allow_nil => false, no es necesario contar con la validación. – efoo

4

Pruebe COUNTRY_CODES.keys si solo quiere comprobar con las teclas en el hash.

1

¿Cómo es esto?

Cuestiones relacionadas