9

Sto lavorando con un'app per un sito web di concerti, dove tutte le volte (orari degli annunci, orari di inizio della vendita e orari di inizio degli eventi) sono locali per l'ora di ogni particolare zona. Prendo la data/ora immessa dall'utente dove applicabile ed eseguo un before_filter per impostare il fuso orario appropriato in modo che tutto sia archiviato nel database in UTC. Per la "nuova" forma e per visualizzare i tempi in indice e mostrare azioni, nessun problema. Quando i dati vengono portati fuori dal database e in una vista, io uso in_time_zone per adattarmi al particolare luogo.Rails - Selezione data e ora in un fuso orario specificato

L'unico problema riguarda il modulo di modifica. La selezione di data/ora mostra i dati in UTC. Quando lavoro sul sito, mi adeguo mentalmente, ma per gli altri è confuso. Mi piacerebbe fare qualcosa sulla falsariga di:

<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>

Oppure, nel controller:

def edit 
    @performance = Performance.find(params[:id]) 
    @event = @performance.event 
    @performance.start_datetime = @performance.start_datetime.in_time_zone(@event.time_zone) 
end 

Poi semplicemente, <%= f.datetime_select :start_datetime %>.

Purtroppo, non ho trovato il modo giusto per farlo. Hai qualche idea per cui valga la pena dare un colpo?

Grazie mille.

risposta

0

Che ne dite di qualcosa di simile:

# change PST to correct zone abbrev. 
new_zone = ActiveSupport::TimeZone.new("PST") 
@performance.start_datetime = @performance.start_datetime.in_time_zone(new_zone) 
1

Io non sono sicuro se ho ben capito che cosa si vuole fare, ma dal momento che si stanno memorizzando l'@ event.time_zone, si potrebbe aggiungere

:default => start_time.in_time_zone(@event.time_zone) 

nel campo modulo datetime_select.

0

Ho appena notato che questo è un vecchio post ma: Se fossi in te, userei un attributo virtuale per rappresentare la data della sede. Ad esempio, potresti aggiungere un attributo al rendimento chiamato adjust_start_time.

3

È possibile utilizzare il metodo di default di datetime_select, come segue:

%br 
= f.label :req_sess_start, "Session starts at" 
= f.datetime_select(:req_sess_start, :start_year => 2010, :ampm => true, :default => 0.days.from_now.in_time_zone(@timezone)) 

A causa del valore di default indicato, il cliente si assume che i tempi deve essere inserito nel suo/la sua fuso orario locale, ma ... questo valore sarà effettivamente nel fuso orario predefinito per la tua applicazione (come fornito in application.rb, e il valore predefinito è UTC). Quindi, è necessario un codice lato server per convertirlo in valore corretto.

Problemi correlati