2011-10-19 9 views
0

私は以下のようなシナリオを持っています: 私はレールウェブポータル(Rails 3.1)を持っていて、RestKit 0.9.3(最新バージョン) iOSデバイス。 私は、サーバーからのデータ構造をiOSデバイスのコアデータモデルにマップしたいと考えています。次のようにモデルが設計されていますRails 3.1&RestKit 0.9.3 - 参照のマッピング

クラス

  • ユーザー
  • 役割
  • ポスト
  • コメント

関係

  • ユーザーは、ユーザーが複数の記事があります/投稿コメントはあり/ 1ユーザー
  • A Postは、複数のコメントを持っている持っている1ポスト
役割は、複数のユーザー
  • を持つことができます/ゼロまたは1つの役割を持っています

    RestKitのリレーションのデフォルトマッピングでは、巨大なメッセージと冗長転送が発生するのは、ロールを送信/受信するとすべてのユーザーが転送され、ユーザーを送信/受信するためです。各ユーザーに追加されます。ユーザー、投稿、コメントでも同じことが起こります。 多くのデータとベストソリューションは、私が思う限り、参照され、各タイプを転送するIDを送信することです。 これは、iOSデバイスからサーバーにデータを送信するときに、Railsが何をすべきかを理解しているため、ロールのIDをUserの「role_id」フィールドにマッピングすることで完全に機能します。したがって、関係は関係としてマッピングされるのではなく、IDフィールドと同じようにマッピングされます。しかし、UserオブジェクトにリンクされたRoleオブジェクトがないため、RestKitはマッピングと何をするべきか理解していないため、デバイス上に存在しないサーバーからUsersを受け取ると、エラーが発生します。

    私はリレーションをマップし、プライマリキーのマッピングを使用して、RestKitがロールのプライマリキーのみを送信するように調査しました。しかし、Railsはこれで何をするべきか理解していません。

    { "ID":1、 "UID": "my_user_name"、 "PWD": "my_passwordという"、 "役割":{ "ID":0 それは次のようになります}}

    しかし、レールは、そのような期待される:

    { "ID":1、 "UID": "my_user_nameを"; 「PWD」:「my_passwordという」、 「ROLE_ID」:0 }

    私の現在の状態だと、私は本当にこの誤解を解くために方法がわかりません。

    私は何か助けに非常に感謝しています!

  • 答えて

    1

    そのための2つの解決策があります。

    1)を使用すると、質量にしたいという事実のあなたのレールモデルを認識させる

    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"];