我有以下情况: 我有一个rails web门户(Rails 3.1),我使用RestKit 0.9.3(最新版本)从iOS设备连接门户。 我想将数据结构从服务器映射到iOS设备上的核心数据模型。该模型的设计如下:
类
关系
问题是,RestKit中关系的默认映射导致巨大的消息和冗余传输,因为当我发送/接收角色时,所有用户也将被转移,如果我发送/接收用户,角色添加到每个用户。用户,帖子和评论也是如此。 对于大量数据而言,就我所能想到的而言,最好的解决方案就是发送ID,这些ID被引用并传输每种类型。 当我通过将Role的ID映射到User中的字段“role_id”时,将数据从iOS设备发送到服务器时,这非常有效,因为Rails确实知道如何处理它。因此,关系不会映射为关系,而是映射为ID字段。但是当我从服务器接收用户时,设备上没有用户,我收到错误,因为RestKit不知道如何处理映射,因为没有链接到User对象的Role对象。
所以我研究并发现你可以映射关系并使用主键的映射,这样RestKit只会发送角色的主键。但是现在Rails不明白该怎么做。 它看起来像这样:
{ “ID”:1, “UID”: “my_user_name” “PWD”: “MY_PASSWORD” “角色”:{ “ID”:0 } }
但是Rails期待这样的事情:
{ “ID”:1, “UID”: “my_user_name”; “PWD”: “MY_PASSWORD” “ROLE_ID”:0 }
这是我现在的状态,我真的不知道如何解决这个误解。
我会非常感谢任何帮助!
答案 0 :(得分:1)
有两种可能的解决方案:
1)让您的rails模型意识到您希望通过添加
来批量更新角色关系accepts_nested_attributes_for :role
或
2)更改客户端代码的序列化映射。
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"];