9
votes

Sériciateur de modèle actif ne fonctionne pas avec des rails-API GEM

J'utilise des rails-API GEM dans mon projet API JSON, et j'ai utilisé à cet effet un gemme de sérialisateur de modèle actif pour sérialiser mes objets, mais également comment les objets ne sont pas sérialisés à l'aide de sérialisateur de modèle actif.

J'ai un messageriorialiseur à l'intérieur de mon dossier Serializers xxx

et mon contrôleur de messages est comme suit xxx

mais Le problème est que l'objet sérialisé jeté au client contient tous les champs du modèle de message, c'est-à-dire; Il contient aussi des champs créés_at, mise à jour_at.

semble que ce n'utilise pas sérialisé.

Qu'est-ce qui aurait pu mal tourner? J'ai beaucoup cherché à ce sujet mais n'a pas trouvé de poste qui m'a aidé.

merci


2 commentaires

Changez ceci en Classe API :: MessagesController API de classe :: MessagesController


Non pas bien. API :: La classe Basecontroller hérite de la classe d'applicaionController. Donc, fondamentalement, c'est la même chose.


4 Réponses :


10
votes

Quelle version d'AMS utilisez-vous?

J'ai eu ce même problème et que vous avez pu résoudre le problème en modifiant la version AMS de 0.9.x sur 0.8.x. Cela peut être fait en ajoutant un numéro de version à votre gemfile. xxx

Il y a des notes à ce sujet sur le Républicité AMS Github.

https://github.com/rail-api/active_model_serializers#Maintenance-Please-Read


1 commentaires

Merci! Aurait perdu des heures avant de réaliser cela!



1
votes

Je n'ai pas rétrogradé, j'ai passé du temps à essayer différentes choses et à la fin, je reçois un motif comme celui-ci:

def attachments
  attachments = object.attachments.to_a
  return [] if attachments.empty?
  serializer = ActiveModel::Serializer::ArraySerializer.new(attachments, each_serializer:AttachmentSerializer)
  ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:attachments]
end


0 commentaires

16
votes

Dans votre baseController, avez-vous ajouté l'incluse ci-dessous?

Inclure ActionController :: Sérialisation


1 commentaires

Ceci est la solution correcte. Ne jamais déclasser le gemme.



5
votes

C'est parce que la sérialisation n'est pas chargée par défaut dans Rails-API.
Vous devez le faire:

class ApplicationController < ActionController::API
  include ::ActionController::Serialization
end


1 commentaires

Cela ne change rien pour moi. Toute autre idée?