【问题标题】:Rails 3.1 & RestKit 0.9.3 - mapping of referencesRails 3.1 & RestKit 0.9.3 - 引用映射
【发布时间】:2011-10-19 08:31:13
【问题描述】:

我有以下情况: 我有一个 Rails 门户网站(Rails 3.1),我使用 RestKit 0.9.3(最新版本)从 iOS 设备连接门户。 我想将数据结构从服务器映射到 iOS 设备上的核心数据模型。模型设计如下:

  • 用户
  • 角色
  • 发布
  • 评论

关系

  • 一个用户有零个或一个角色/一个角色可以有多个用户
  • 一个用户有多个帖子/一个帖子有一个用户
  • 一个帖子有多个评论/一个评论有一个帖子

问题是,RestKit 中关系的默认映射会导致大量消息和冗余传输,因为当我发送/接收角色时,所有用户也会被传输,如果我发送/接收用户,角色被添加到每个用户。用户、帖子和评论也是如此。 这只是大量的数据,就我能想到的而言,最好的解决方案就是发送 ID,这些 ID 被引用并传输每种类型。 当我通过将角色的 ID 映射到用户中的字段“role_id”将数据从 iOS 设备发送到服务器时,这非常有效,因为 Rails 确实知道如何处理它。所以关系没有被映射为关系,而只是作为 ID 字段。但是,当我从服务器接收到设备上不存在的用户时,我会收到错误消息,因为 RestKit 不了解如何处理映射,因为没有角色对象链接到用户对象。

所以我研究发现你可以映射关系并使用主键的映射,这样RestKit只会发送角色的主键。但是现在 Rails 不明白如何处理它。 它看起来像这样:

{ “身份证”:1, "uid":"my_user_name", “密码”:“我的密码”, “角色”: { “身份证”:0 } }

但 Rails 期待这样的事情:

{ “身份证”:1, “uid”:“我的用户名”; “密码”:“我的密码”, “角色 ID”:0 }

这是我目前的状态,我真的不知道如何解决这个误解。

我会非常感谢任何帮助!

【问题讨论】:

    标签: mapping ruby-on-rails-3.1 reference restkit


    【解决方案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"];
    

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多