7

aşağıdaki kod time_zoneActiveSupport::TimeZone.us_zones Saat dilimleri içinde seçtik emin yaptı. Sadece 4.1 Rails için yükseltilmiş ve ben (yani sadece basit modeller inceleyen) benim indeks sayfasında bu hatayı alıyorum:validates_inclusion_of artık Rails 4.1'de aynı şekilde çalışmıyor mu?</p> <pre><code>validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name) </code></pre> <p>Raylar 4.0 büyük çalıştı:

yöntem # ile bir nesne? ActiveSupport::TimeZone.zones_map(&:name) artık geçerli bir değerdir, bunun nereden tahmin ediyorum yapılandırma karma

seçeneği veya proc, lambda veya sembol gereklidir ve şekilde sağlanmalıdır: in (içinde veya) in özelliği için?

cevap

22

.keys eklemeye çalışın?

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

mantıklı, ben işe yaradı ... Ben :(çok şimdi diğer hataların bir sürü düşünüyorum görünüyor raylar üzerinde beklemek 4.1 ... –

+8

Blok argümanı, '&: name' 4.1 uygulaması ile ilgisizdir.Zones_map, bir karma değil bir ThreadSafe :: Cache nesnesini döndürür. Bu, #include desteklemez. Anahtarın mevcut olup olmadığını belirlemeye yarayan bir yöntem olarak: 1. 'ActiveSupport :: TimeZone.zones_map.keys' 4.1'de yeterlidir. –

1

bu kadar iyi çalışır validates_inclusion_of kullanmaya devam etmek isterseniz:

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

yılında Raylar 5, ActiveSupport::TimeZone.zones_map özel bir yöntemdir. Eğer doğrulama çalışmak istediğiniz nedenle, ben şu sözdizimini önermek. Gidiyorum gibi

validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) } 
İlgili konular