Сопоставление RestKit с Rails 3.1 - PullRequest
8 голосов
/ 28 июня 2011

В 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, "местоположение" корневого узла теперь удаляется по умолчанию, и я не уверен, как настроить поставщика картографирования без него? Я попробовал ноль и искал альтернативные методы, но безуспешно.

Вы знаете, как отобразить это? Пожалуйста, помогите!

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

Ответы [ 3 ]

7 голосов
/ 04 июля 2011

Со стороны RestKit, я не знаю, но из этой темы похоже, что вы можете вернуть json к ожиданиям RestKit, выполнив:

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

Edit: Для полноты вот как вы бы сделали это с 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.

4 голосов
/ 25 октября 2011

В RestKit вы можете зарегистрировать сопоставление, содержащее имя корневой модели, например:

[objectManager.mappingProvider registerMapping:locationMapping withRootKeyPath:@"location"];
0 голосов
/ 28 августа 2012

Короткий и приятный ответ: forKeyPath:@"" сработает.

...