Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to POST an object to rails using RestKit?
    text
    copied!<p>I'm trying to make the magic happen with RestKit and Rails. I'm using Rails 3.1.1, and RestKit 0.9.3 (not the master branch). I am using Core Data in my iOS app, so I'm trying to setup the app to use as much RestKit magic as possible to interact with the rails app.</p> <p>However, I'm having a problem trying to POST a new object to my server to be created. I have successfully GET'ed the objects down. Here is my code to do that:</p> <pre><code>RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://IP_ADDRESS"]; manager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"magikarp.sqlite"]; manager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; manager.acceptMIMEType = RKMIMETypeJSON; manager.serializationMIMEType = RKMIMETypeJSON; /// /// Setup Routing /// RKObjectRouter *router = [[RKObjectRouter alloc] init]; [router routeClass:[List class] toResourcePath:@"/lists/(listID)"]; [router routeClass:[List class] toResourcePath:@"/lists" forMethod:RKRequestMethodPOST]; manager.router = router; /// /// Setup mapping for my "List" object; a subclass of NSManagedObject /// RKManagedObjectMapping *listMapping = [RKManagedObjectMapping mappingForClass:[List class]]; listMapping.primaryKeyAttribute = @"listID"; [listMapping mapAttributes:@"title", nil]; [listMapping mapKeyPath:@"id" toAttribute:@"listID"]; [manager.mappingProvider setMapping:listMapping forKeyPath:@"list"]; </code></pre> <p>That seems to be working well for me. Now, I want to POST a newly created object back to the server.</p> <pre><code>- (void)createList:(NSString *)listName { List *newList = [List object]; newList.title = listName; [[RKObjectManager sharedManager] postObject:newList delegate:self]; } </code></pre> <p>I call this method with the name I want the new list to have. This method is called, but I get this error:</p> <pre><code>2011-12-06 19:24:17.822 Magikarp[13921:14c1b] W restkit.object_mapping:RKObjectMapper.m:74 Adding mapping error: Could not find an object mapping for keyPath: '' 2011-12-06 19:24:17.823 Magikarp[13921:14c1b] E restkit.network:RKObjectLoader.m:190 Encountered errors during mapping: Could not find an object mapping for keyPath: '' 2011-12-06 19:24:17.823 Magikarp[13921:14c1b] Hit error: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "Could not find an object mapping for keyPath: ''" UserInfo=0x6bb9da0 {=RKObjectMapperKeyPath, NSLocalizedDescription=Could not find an object mapping for keyPath: ''} </code></pre> <p>The attempt I made to get the mapping done was:</p> <pre><code>RKObjectMapping *listSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; [listSerializationMapping mapKeyPath:@"title" toAttribute:@"title"]; [listSerializationMapping mapKeyPath:@"ListID" toAttribute:@"id"]; [manager.mappingProvider setSerializationMapping:listSerializationMapping forClass:[List class]]; </code></pre> <p>(That gives the above error). I know there is a pretty straightforward way to do this, but none of the examples have this code, and all the documentation seems out of date... Do you have to send the info as POST parameters as well? Help would be appreciated, Thank you!</p> <p><strong>Update</strong><br> This is the server response - it works, but it appears that the parameters are a bit messed up? (The title I put in was: "Made from the iPhone 2!")</p> <pre><code>Started POST "/lists" for 129.21.86.32 at 2011-12-07 09:34:43 -0500 Processing by ListsController#create as JSON Parameters: {"id"=&gt;0, "title"=&gt;"Made from the iPhone 2!", "list"=&gt;{"id"=&gt;0, "title"=&gt;"Made from the iPhone 2!"}} WARNING: Can't verify CSRF token authenticity WARNING: Can't mass-assign protected attributes: id (0.3ms) BEGIN SQL (0.9ms) INSERT INTO "lists" ("created_at", "title", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", Wed, 07 Dec 2011 14:34:43 UTC +00:00], ["title", "Made from the iPhone 2!"], ["updated_at", Wed, 07 Dec 2011 14:34:43 UTC +00:00]] (16.4ms) COMMIT Completed 201 Created in 77ms (Views: 1.8ms | ActiveRecord: 21.9ms) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload