Rails способ изменить текущий вывод JSON - PullRequest
1 голос
/ 16 января 2012

Я работаю с JSON ниже.Внешняя метка отсутствует.

[{
  "id":1,
  "updated_at":"2012-01-13T17:13:47Z",
  "created_at":"2012-01-13T17:13:47Z",
  "name":"dave"},
 {
   "id":2,
   "updated_at":"2012-01-13T17:13:55Z",
   "created_at":"2012-01-13T17:13:55Z", 
   "name":"steve"
 }]

Я думаю, что RestKit ожидает

{***people:*** 
  [{
    "id":1,
    "updated_at":"2012-01-13T17:13:47Z",
    "created_at":"2012-01-13T17:13:47Z",
    "name":"dave"},
   {
     "id":2,
     "updated_at":"2012-01-13T17:13:55Z",
     "created_at":"2012-01-13T17:13:55Z", 
     "name":"steve"
   }]
}



@interface Data : NSObject {
Person *person;
NSArray *dogs;
}
@property (nonatomic ,retain) Person *person;
@property (nonatomic ,retain) NSArray *dogs; 
@end

@interface Person : NSObject {

NSString *name;
NSNumber *personId;
NSDate   *updatedAt;
NSDate   *createdAt;

}

@property (nonatomic , retain) NSDate * createdAt;
@property (nonatomic , retain) NSDate * updatedAt;
@property (nonatomic , retain) NSNumber  *personId;
@property (nonatomic , retain) NSString *name;
@end

Вот мое отображение:

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[Person class]];
[userMapping mapKeyPath:@"updated_at" toAttribute:@"updatedAt"];
[userMapping mapKeyPath:@"created_at" toAttribute:@"createdAt"];
[userMapping mapKeyPath:@"name" toAttribute:@"name"]; 
[userMapping mapKeyPath:@"id" toAttribute:@"personId"];

RKObjectMapping* dogMapping = [RKObjectMapping mappingForClass:[Dog class]];
[dogMapping mapKeyPath:@"created_at" toAttribute:@"createdAt"]; 
[dogMapping mapKeyPath:@"person_id" toAttribute:@"spersonId"]; 
[dogMapping mapKeyPath:@"name" toAttribute:@"name"]; 
[dogMapping mapKeyPath:@"updated_at" toAttribute:@"updatedAt"]; 
[dogMapping mapKeyPath:@"id" toAttribute:@"dogId"]; 

[[RKObjectManager sharedManager].mappingProvider setMapping:userMapping 
forKeyPath:@"person"];

RKObjectRouter * router = [RKObjectManager sharedManager].router;
[router routeClass: [Person class] toResourcePath:@"/people/:personId"];
[router routeClass: [Person class] toResourcePath:@"/people" 
forMethod:RKRequestMethodPOST];

RKObjectMapping *personSerializationMapping= [RKObjectMapping mappingForClass:
[NSDictionary class]];
[personSerializationMapping mapKeyPath:@"name" toAttribute:@"person[name]"];
[[RKObjectManager sharedManager].mappingProvider 
setSerializationMapping:personSerializationMapping forClass: [Person class]];

Person* dave =[[Person alloc]init ];
dave.name = @"data";
NSLog(@"%@", [daveLiu name]);

//NSLog("name is %@", daveLiu.description );
[[RKObjectManager sharedManager] postObject:dave delegate:self];

ОБНОВЛЕНИЕ! Я получил приведенный выше код для работы.Он сохранится на сервере rails, но я все еще получаю сообщение об ошибке!

Processing PeopleController#create (for 127.0.0.1 at 2012-01-16 06:12:18) [POST]
  Parameters: {"person"=>{"name"=>"data"}}
  Person Create (0.4ms)   INSERT INTO "people" ("updated_at", "created_at", "name") VALUES('2012-01-16 14:12:18', '2012-01-16 14:12:18', 'data')
Completed in 11ms (View: 1, DB: 0) | 200 OK [http://localhost/people]


 W restkit.object_mapping:RKObjectMapper.m:60 Adding mapping error: Could not find an object mapping for keyPath: ''

E restkit.network:RKObjectLoader.m:178 Encountered errors during mapping: Could not find an object mapping for keyPath: ''

Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "Could not find an object mapping for keyPath: ''" UserInfo=0x4e6c4e0 {=RKObjectMapperKeyPath, NSLocalizedDescription=Could not find an object mapping for keyPath: ''}
...