NoMethodError per time_zone_select in una forma
-
26-09-2019 - |
Domanda
Ho impostato la mia app esattamente in linea con il Railscasts Time Zone Episodio 1 ma quando corro
<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones %>
ottengo questo errore
NoMethodError in Utenti # nuova
Mostra app / views / utenti / new.html.erb dove la linea # 27 ha sollevato:
Hai un oggetto nullo quando non hai aspettatelo! Ci si sarebbero aspettati un istanza di Array. Si è verificato l'errore valutando nullo. <=>
Con la linea 27 è la linea suddetta. Sono davvero bloccato su questo ...
Soluzione
Ho esattamente lo stesso problema. Sembra essere correlato a Rails 2.3.8, perché se mi tornare alla mia precedente versione (2.3.4, impostando questo nel /config/environment.rb), tutto funziona bene. Si presenta come un bug. Sto controllando se questo bug report e la patch conseguente risolverà questo problema: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4942-activesupporttimezone-incorrectly-stores -bogus-valori-in-zones_map # ticket-4942 .
Altri suggerimenti
Avete un campo di database per il modello di nome time_zone? è vero nome fuso orario, invece?
Avreste bisogno di una migrazione con qualcosa di simile:
add_column :users, :time_zone, :string
poi
rake db:migrate
Sì, questo è un bug in 2.3.8, ed è stato fissato nel biglietto di cui sopra.
E 'stato probabilmente causato da un fuso orario memorizzato in un campo di database che non corrispondeva a qualsiasi fuso orario sia Rails o tzinfo sapevano. Nel nostro caso, è stato scattato da accidentalmente HTML codifica e commerciali, in modo che Pacific Time (US & Canada)
diventato Pacific Time (US & Canada)
. http://github.com/rails/rails/commit/78e4d88c7071c633ee1eb68f49b90719aa198eaa dovrebbe risolverlo , ma si potrebbe desiderare di tornare indietro e assicurarsi che non si dispone di alcun dato ancora cattivo nel vostro DB.
Ho avuto questo stesso problema, che ha causato uno dei miei test cetriolo a fallire. Mi sono spostato in Rails 2.3.9 (dalla 2.3.8) e tutti i test superato. Buona fortuna!