Question

J'ai le scénario suivant: J'ai un rails portail web (Rails 3.1) et j'utilise RestKit 0.9.3 (la dernière version) pour connecter le portail à partir d'un appareil iOS. Je veux cartographier la structure de données depuis le serveur vers le modèle de données de base sur l'appareil iOS. Le modèle est conçu comme suit:

Classes

  • Utilisateur
  • Rôle
  • Publier
  • Commentaire

Relations

  • Un utilisateur a zéro ou un rôle / Un rôle peut avoir plusieurs utilisateurs
  • Un utilisateur a plusieurs messages / A Post a un utilisateur
  • Un message a plusieurs commentaires / un commentaire a un message

Le problème est que le mappage par défaut des relations dans les résultats de RestKit dans d'énormes messages et transfert redondants parce que quand j'envoie / recieve les rôles, tous les utilisateurs seront transférés aussi bien et si j'envoie / recieve les utilisateurs, le rôle est ajouté à chaque utilisateur. La même chose se produit avec les utilisateurs, les messages et commentaires. Il est juste de beaucoup de données et la meilleure solution, pour autant que je pouvais penser à un, est de simplement envoyer les pièces d'identité, qui sont référencés et transfèrent chaque type. Cela fonctionne parfaitement quand j'envoie les données de l'appareil iOS au serveur en cartographiant les ID de rôle à un champ « ROLE_ID » dans l'utilisateur, car Rails ne comprend ce qu'il faut faire avec cela. Ainsi, les relations ne sont pas mis en correspondance que les relations, mais aussi les champs d'identification. Mais quand je reçois des utilisateurs du serveur, qui lorsqu'ils ne sont pas présents sur l'appareil, je reçois une erreur, parce que RestKit ne comprend pas quoi faire avec la cartographie, car il n'y a pas d'objet de rôle lié à l'objet utilisateur.

Je fait des recherches et a trouvé que vous pouvez mapper les relations et utiliser une cartographie de la clé primaire, de sorte que RestKit n'enverrait la clé primaire du rôle. Mais maintenant Rails ne comprend pas quoi faire. Il ressemble à ceci:

{ "Id": 1, "Uid": "my_user_name", "Passwd": "my_password", "Rôle": { "Id": 0 } }

Mais Rails attend quelque chose comme ça:

{ "Id": 1, "Uid": "my_user_name"; "Passwd": "my_password", "ROLE_ID": 0 }

C'est mon état actuel et je ne sais vraiment pas comment résoudre ce malentendu.

Je serais très reconnaissant pour toute aide!

Était-ce utile?

La solution

Il existe deux solutions possibles pour cela:

1) Faites vos rails aware du fait que vous souhaitez mettre à jour de masse le rôle de relations en ajoutant

accepts_nested_attributes_for :role

ou

2) Modifier le mappage de sérialisation de votre code client.

RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]];
[userMapping mapKeyPath:@"id" toAttribute:@"userId"];
[userMapping mapKeyPath:@"uid" toAttribute:@"uid"];

...

[manager.mappingProvider registerMapping:userMapping withRootKeyPath:@"user"];

RKObjectMapping* userSerializationMapping = [manager.mappingProvider serializationMappingForClass:[User class]];
[userSerializationMapping mapKeyPath:@"role_id" toAttribute:@"role.id"];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top