0
votes

Comment faire des clés racines reposantes dans le sérialisateur de modèle actif versé?

J'ai une application Ruby sur Rails avec User_Controller généré via Scanfold. XXX PRE>

Le modèle P>

   {
    "api/v1/user": {
        "id": 2,
        "phone": "999999999",
        "first_name": "Rajan",
        "email": "sample@h.com",
        "dob": "2000-01-01",
        "last_name": "Verma",
        "gender": "male",
        "otp_code": "503036"
      }
   }


8 commentaires

Utilisez-vous ActiveModel :: sériializer ?


Oui. Est-ce faux?


Non, ça va, il n'y a que des libs de sérialisation différentes et selon laquelle vous utilisez la réponse est différente.


Ne pas être « ce gars-là », mais avez-vous essayé github.com/fast-jsonapi/fast_jsonapi Gem au lieu d'ASM? Si vous êtes au stade précoce, cela peut être utile de changer car il est beaucoup plus rapide.


@Tomharevey ASM a des problèmes que je connais ... mais JSON_API est horrible .. J'ai passé des mois sur cette fixation manuellement .. Comment ce gemme peut être si pupulaire. JSON_API n'a pas de problème compliqué la rythme simple des réponses. Pour afficher une liste, vous devez créer des demandes indépendantes d'identifiant correspondant qui peut être facilement imbriquée dans un seul objet.


De plus, si vous essayez d'intégrer des relations, ils vont toujours dans un objet séparé. Pourquoi? Vous avez toutes les données dans un seul objet, vous devez toujours écrire un code supplémentaire pour les cartographier. Et si vous voulez développer pour mobile ... Avoir 2 références simples rendez votre objet nié 7 niveau de profondeur .. qui veut cela dans le monde réel .. ?? Regardez ce commentaire et thread Github.com/netflix/fast_jsonapi/issues/ ...


Je vois; Vous ne voulez pas que la spécification JSONAPI, assez juste. Si vous suivez cette spécification, le gemme est bon, sinon pas si


JSON_API SPEC est juste pour les cadres frontales. Mais pour les applications mobiles nidifiant que beaucoup de profondeur tue la performance.


3 Réponses :


1
votes

Il semble donc qu'il semble activemodel :: sériializer utilise le nom du modèle complet comprenant des modules comme clé racine, voir

https://github.com/Rails-api/active_model_serializers/blob/0-10-Stable /lib/active_model/serializer.rb#l384-l391

Donc, vous définissez la touche racine de votre contrôleur. xxx < / pré>

ou si vous ne voulez jamais inclure le nom complet de votre sérieliseur, vous pouvez créer un sérialiseur de base xxx


2 commentaires

J'ai eu l'idée .. mais il donne méthode indéfinie racine 'pour API :: V1 :: usersiorializer: classe .


Ah vous avez raison, la racine doit être définie dans le contrôleur. Je pense que j'irais avec la deuxième option et implémenteriez un sérialisateur de base.



1
votes

La raison pour laquelle cela se produit est que votre modèle est API :: V1 :: Utilisateur Lequel a probablement été autogogénéisé par l'échafaud.

Êtes-vous sûr d'avoir besoin de versions dans votre modèle?

peut-être avoir un modèle utilisateur et appliquer la version de réception de noms sur uniquement dans vos contrôleurs et vos itinéraires suffira à votre application.

Si vous souhaitez également avoir l'espace de noms VX sur vos modèles, vous pouvez remplacer le json_key comme Christian Bruckmayer suggère, soit à tous les sérialiseurs, soit explicitement à API :: V1 :: usersiorializer


1 commentaires

Oui, je ne pense pas que nous ayons besoin de la version des modèles. J'ai supprimé ça ..



0
votes

Qu'est-ce que https://github.com/bsm/serialization_scopes faire là-bas? La ligne Serialization_Scope: View_Context Pourrait être supprimé Non?


1 commentaires

C'est pour accéder à Current_User et à d'autres méthodes d'assistance dans Serializer ... sans pertinence pour cette question. J'ai oublié de supprimer