Ruby on rails Rails更改当前json输出的方法

Ruby on rails Rails更改当前json输出的方法,ruby-on-rails,restkit,Ruby On Rails,Restkit,我正在使用下面的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" }] 我认为

我正在使用下面的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服务器,但我仍然得到一个keypath错误

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: ''}

即使没有根键路径,您也可以使用RestKit映射响应。@mja您好,您能为我指出post映射的正确方向吗?我可以很好地阅读,但我似乎找不到正确的地图。我不得不侵入rails控制器应用程序的create函数,取而代之的是:name,这是不对的。提前谢谢。@Katen嗨,再次感谢您的时间,我假设您使用的是ojbective c代码,还是您想要的是rails代码?Rails代码只是一个脚手架生成的shell。使用ActiveRecord::Base.include_root_in_json=false,我将更改
RKObjectMapping*PersonSerializationMappingForClass=[RKObjectMappingForClass:[NSMutableDictionary class];[personSerializationMapping mapAttributes:@“person”,无];[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:PersonSerializationMappingforClass:[数据类]]
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[dataMapping inverseMapping]forClass:[Data class]]好的,谢谢,我会试试看,但是如果你介意的话,你介意看看我新编辑的第二部分吗?我把数据类全部取出来,因为它只是一个超拱形的虚构类,我让其他人把它发送到rails服务器{“post”=>{“name”=>“data”}它几乎就在那里了,只是post{}thnx之外又有了额外的括号!!