Qualcuno sa di un modo pulito per evitare il ActiveJob::SerializationError
che si verifica quando si tenta di serializzare un oggetto Date
o Time
?SerializationError Rails ActiveJob Ora e data
Le due soluzioni che ho avuto finora sono a:
- chiamata maresciallo/JSON/YAML
dump
durante il caricamento degli argomenti e poiload
indietro nel lavoro (che fa schifo perché ho bisogno di scimmia patchare il lavoro mailer) - scimmia di patch
Date
eTime
in questo modo:
/lib/core_ext/time.rb
class Time
include GlobalID::Identification
def id
self.to_i
end
def self.find(id)
self.at(id.to_i)
end
end
/lib/core_ext/date.rb
class Date
include GlobalID::Identification
def id
self.to_time.id
end
def self.find(id)
Time.find(id).to_date
end
end
che aspira anche. Qualcuno ha una soluzione migliore?
È davvero necessario passare solo una data o ora al lavoro (e perché)? Penso che sarebbe meglio passare un ActiveModel come parametro al lavoro, possibilmente contenente un'istanza Data o Ora. (ActiveModels include GlobalID :: Identification in modo che siano serializzabili) – sourcx
No, non è veramente necessario. È solo conveniente. E per di più, ha funzionato con DelayedJob prima di integrare ActiveJob. Quindi ... sembra stupido che avrei bisogno di cambiare il mio codice per integrarlo con qualcosa che dovrebbe semplicemente astrarre anziché cambiare funzionalità. – kddeisz
Accodate solo l'oggetto Data/Ora? Nient'altro? AFAIK, ActiveJob chiama in realtà Marshal per serializzare il tuo oggetto e ha bisogno di qualcosa come la patch della scimmia che hai detto di essere in grado di recuperare e richiamare più tardi questo oggetto. Puoi pubblicare il tuo Mailer? – lsdr