8

Rails 3.0.8では、jsonにモデル名のルート要素が含まれています。たとえば、私のロケーションモデル。

[
{
location: {
city: San Diego
name: Mission Valley YMCA Krause Family Skatepark
pads_required: 0
country: United States

そして、マッピングプロバイダーはロケーションオブジェクトを直接探しました。

RKObjectMapping* locationMapping = [RKObjectMapping mappingForClass:[RKLocation class]];   
[locationMapping mapKeyPath:@"id" toAttribute:@"locationId"];
...
[objectManager.mappingProvider setMapping:locationMapping forKeyPath:@"location"];

Rails 3.1.0にアップグレードすると、ルートノードの「場所」がデフォルトで削除され、それなしでマッピングプロバイダーを構成する方法がわかりません。nilを試し、別の方法を探しましたが、失敗しました。

これをマッピングする方法を知っていますか?助けてください!

[
{
   city: San Diego
   name: Mission Valley YMCA Krause Family Skatepark
   pads_required: 0
   country: United States
4

3 に答える 3

7

RestKit側からはわかりませんが、このトピックから、次のようにすることでjsonをRestKitが期待するものに戻すことができるようです。

class Location < ActiveRecord::Base
  self.include_root_in_json = true
end

編集:完全を期すために、RestKitでそれを行う方法は次のとおりです。

RKObjectMapping* locationMapping = [RKObjectMapping mappingForClass:[RKLocation class]];   
[locationMapping mapKeyPath:@"id" toAttribute:@"locationId"];
...
[objectManager.mappingProvider addObjectMapping:locationMapping];

そして、後でマッパーを呼び出します。

RKObjectMapping* locationMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[RKLocation class]];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/locations" objectMapping:locationMapping delegate:self];

次に、RKObjectLoaderデリゲートメソッドでオブジェクトを処理します。

于 2011-07-04T18:50:44.733 に答える
4

RestKitでは、次のようなルートモデル名を含むマッピングを登録できます。

[objectManager.mappingProvider registerMapping:locationMapping withRootKeyPath:@"location"];
于 2011-10-25T00:04:42.317 に答える
0

短くて甘い答え:forKeyPath:@""うまくいくでしょう。

于 2012-08-28T05:03:02.853 に答える