web-dev-qa-db-fra.com

ActiveJob :: SerializationError - Type d'argument non pris en charge: Time / DateTime

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?

11
Arthur

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.

12
DiegoSalazar