7

Il codice seguente fatto in modo che un time_zone scelto è entro i fusi orari in ActiveSupport::TimeZone.us_zones:validates_inclusion_of non funziona più lo stesso in Rails 4.1?

validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name) 

funzionato grande in Rails 4.0. Appena aggiornato a Rails 4.1 e sto ricevendo questo errore nella mia pagina indice (quindi semplicemente visualizzando i modelli):

Un oggetto con il metodo #include? o un proc, lambda o il simbolo è necessario, e devono essere consegnate come: (o: dentro) l'opzione del hash di configurazione

Sto indovinando questo, ActiveSupport::TimeZone.zones_map(&:name) non è più un valore valido per la proprietà in?

risposta

22

provare ad aggiungere .keys?

validates :time_zone, 
    inclusion: { 
    in: ActiveSupport::TimeZone.zones_map.keys 
    } 
+1

senso, penso che ha funzionato ... ho un sacco di altri errori ormai troppo :(Sembra che sto andando attendere sulle rotaie 4.1 ... –

+8

L'argomento del blocco, '&: name' è irrilevante con l'implementazione 4.1 zone_map restituisce un oggetto ThreadSafe :: Cache, che non è proprio un hash, ma non supporta l'inclusione # ? metodo come metodo per determinare se la chiave è presente. 'ActiveSupport :: TimeZone.zones_map.keys' è sufficiente in 4.1. –

1

Se si desidera continuare a utilizzare validates_inclusion_of questo funziona così:

validates_inclusion_of :time_zone, 
    :in => ActiveSupport::TimeZone.zones_map(&:name).keys, 
    :message => "is not a valid time zone" 
2

In Rails 5, ActiveSupport::TimeZone.zones_map è un metodo privato. Pertanto, se si desidera che il convalida al lavoro, suggerisco la seguente sintassi:.

validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) } 
Problemi correlati