7

Poniższy kod upewnił się, że time_zone wybrał jest w obrębie stref czasowych w ActiveSupport::TimeZone.us_zones:validates_inclusion_of nie działa już tak samo w Rails 4.1?

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

Pracował wielki w Rails 4.0. Właśnie zaktualizowałem do Rails 4.1 i otrzymuję ten błąd na mojej stronie indeksu (więc po prostu przeglądam modele):

Obiekt z metodą #include? lub Proc, lambda lub symbol wymagane i muszą być dostarczane jako: (albo: wewnątrz) opcją mieszania konfiguracji

Zgaduję tym, ActiveSupport::TimeZone.zones_map(&:name) nie jest prawidłową wartością dla właściwości in?

Odpowiedz

22

spróbuj dodać .keys?

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

sens, myślę, że to działało ... Mam wiele innych błędów teraz zbyt :(Wygląda jadę czekać na szynach 4.1 ... –

+8

Argument bloku '&: name' jest nieistotny dla implementacji 4.1. zones_map zwraca obiekt ThreadSafe :: Cache, który nie jest dość skrótem. Nie obsługuje on #include ? metoda jako sposób określenia, czy klucz jest obecny: 'ActiveSupport :: TimeZone.zones_map.keys' jest wystarczające w 4.1. –

1

Jeśli chcesz zachować używając validates_inclusion_of ten działa tak samo:

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

W Szyny 5, ActiveSupport::TimeZone.zones_map to prywatna metoda. Dlatego, jeśli chcesz, aby walidacja do pracy, proponuję następującą składnię:.

validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) } 
Powiązane problemy