在RestKit中序列化嵌套图像(Rails后端)

这是我得到的:

food_name_token Pizza id 1 category_id 1 review {"note"=>"tasty!", "image"=>"<RKParamsAttachment: 0x7834500>"} 

这就是我所期望的:

  food_name_token Pizza id 1 category_id 1 review {"note"=>"tasty!", "image"=>{"filename"=>"image", "type"=>"image/png", "name"=>"image", "tempfile"=>"#", "head"=>"Content-Disposition: form-data; name=\"image\"; filename=\"image\"\r\nContent-Type: image/png\r\n"}} 

我正在使用Restkit,我试图序列化Iphone上的数据,并将其发送到我的Rails后端。 大多数情况下,它的工作,但我似乎无法让我的多部分图像序列化。

该图片属于“评论”类,而该类又被嵌套在“Dish”类中。 这是我到目前为止:

 // Set up routes RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://postbin.org"]; [manager.router routeClass:[Dish class] toResourcePath:@"/5a850fe1" forMethod:RKRequestMethodPOST]; [manager.router routeClass:[Review class] toResourcePath:@"/5a850fe1" forMethod:RKRequestMethodPOST]; // Map Dish Object RKObjectMapping *dishMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; [dishMapping mapKeyPath:@"id" toAttribute:@"identifier"]; [dishMapping mapKeyPath:@"category_id" toAttribute:@"categoryID"]; [dishMapping mapKeyPath:@"food_name_token" toAttribute:@"name"]; // Map Review Object RKObjectMapping *reviewMapping = [RKObjectMapping mappingForClass:[Review class]]; [reviewMapping mapKeyPath:@"note" toAttribute:@"note"]; [reviewMapping mapKeyPath:@"image" toAttribute:@"image"]; // Define the relationship mapping [dishMapping mapKeyPath:@"review" toRelationship:@"review" withMapping:reviewMapping]; // Set serialization for Dish Class RKObjectMapping* dishSerializationMapping = [dishMapping inverseMapping]; [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:dishSerializationMapping forClass:[Dish class] ]; // Set serialization for Review Class RKObjectMapping* reviewSerializationMapping = [reviewMapping inverseMapping]; [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:reviewSerializationMapping forClass:[Review class] ]; 

然后我分配的值:

  [Dish sharedDish].name = @"Pizza"; [Dish sharedDish].identifier = [NSNumber numberWithInt:1]; [Dish sharedDish].categoryID = [NSNumber numberWithInt:1]; [Review sharedReview].note = @"tasty!"; // Turn an image into an RKParamsAttachment object and assign it to the image attribute of the Review class RKParams* params = [RKParams params]; UIImage* imageOrig = [UIImage imageNamed:@"pizza.jpg"]; NSData* imageData = UIImagePNGRepresentation(imageOrig); RKParamsAttachment* image = [params setData:imageData MIMEType:@"image/png" forParam:@"image"]; [params release]; [Review sharedReview].image = image; 

然后,将我的Review对象分配给我的Dish对象的review属性,并将其发送出去:

  [Dish sharedDish].review = [Review sharedReview]; [[RKObjectManager sharedManager] postObject:[Dish sharedDish] delegate:self]; 

好像我以错误的方式将图像附加到对象上。

什么是正确的方法来做到这一点?

你尝试手动添加到param名称的嵌套:

 RKParamsAttachment* image = [params setData:imageData MIMEType:@"image/png" forParam:@"review[image]"];