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 p> et mon contrôleur de messages est comme suit p> 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. P> semble que ce n'utilise pas sérialisé. P> 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é. P> merci p> p>
4 Réponses :
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. P> Il y a des notes à ce sujet sur le Républicité AMS Github. P> https://github.com/rail-api/active_model_serializers#Maintenance-Please-Read p> p>
Merci! Aurait perdu des heures avant de réaliser cela!
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
Dans votre baseController, avez-vous ajouté l'incluse ci-dessous? P>
Inclure ActionController :: Sérialisation Code> P>
Ceci est la solution correcte. Ne jamais déclasser le gemme.
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
Cela ne change rien pour moi. Toute autre idée?
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.