2011-09-20 8 views
7

In un inizializzatore ho un enorme COUNTRY_CODES hash, con il formato:Convalida campo Modello: se il valore è uguale a una chiave in un hash

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

Nel mio modello voglio verificare che il valore inserito è:

  • presente
  • una chiave del mio codice hash paese

Come apporacho questo?

non posso usare:

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

Ho provato validatori personalizzati, ma ottengo gli errori di metodo quando il valore è pari a zero, per esempio quando provo a usare value.to_sym, inducendomi a convalidare il validatore e diventa caotico.

Cercando di capire il modo più ESENTE ed efficiente per farlo.

risposta

14

È necessario raccogliere le chiavi COUNTRY_CODES (simboli) come stringhe e convalidare per l'inclusione. Quindi utilizzare:

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

FYI, l'impostazione predefinita per l'inclusione è: allow_nil => false, non è necessario per la presenza di convalida. – efoo

4

Provare COUNTRY_CODES.keys se si desidera solo verificare con i tasti nell'hash.

1

Come questo?

Problemi correlati