J'utilise Rails 5 et ActiveJob pour traiter les tâches en arrière-plan. J'essaie de passer un objet sérialisé avec as_json
à mon travail mais je reçois les erreurs suivantes:
ActiveJob::SerializationError (Unsupported argument type: Time):
ActiveJob::SerializationError (Unsupported argument type: DateTime):
Je comprends qu'ActiveJob ne prendra pas d'objets Time/DateTime car certains systèmes de files d'attente ne gèrent pas ce type. Donc, l'objet que j'essaie de sérialiser est le suivant:
card = Card.first
=> #<Card id: 256, title: "quis", description: "Sunt corporis error laudantium veritatis impedit r...", due_date: "2016-12-15 12:00:00", slug: "quis", created_at: "2016-11-30 17:00:01", updated_at: "2016-11-30 17:00:01", list_id: 26, position: 0, period_type: "hours", period_length: 0.0, user_id: 1>
Quand je cours:
card.as_json
=> {"id"=>256, "title"=>"quis", "description"=>"Sunt corporis error laudantium veritatis impedit repellat quasi.", "due_date"=>Wed, 15 Dec 2016 12:00:00 UTC +00:00, "slug"=>"quis", "created_at"=>Wed, 30 Nov 2016 17:00:01 UTC +00:00, "updated_at"=>Wed, 30 Nov 2016 17:00:01 UTC +00:00, "list_id"=>26, "position"=>0, "period_type"=>"hours", "period_length"=>0.0, "user_id"=>1}
Created_at, updated_at et due_date sont toutes des instances de ActiveSupport::TimeWithZone
J'ai essayé de remplacer cela en utilisant le code suivant dans un initialiseur, que j'ai trouvé dans un autre SO post mais cela n'aide pas:
class ActiveSupport::TimeWithZone
def as_json(options = {})
strftime('%Y-%m-%d %H:%M:%S')
end
end
Quelqu'un pourrait-il m'aider à avoir les dates sous forme de chaînes lorsque as_json
est exécuté sur l'objet?
Utilisation card.to_json
au lieu. Il renverra une chaîne JSON que le travail pourra accepter.
Si vous avez une logique que vous souhaitez utiliser avec as_json
juste chaîne to_json
jusqu'à la fin de l'appel à as_json
c'est à dire. card.as_json.to_json
.