2011-06-28 20 views
8

En Rails 3.0.8, el json contiene un elemento raíz con su nombre de modelo. Por ejemplo, mi modelo de ubicación.Correlación de RestKit con Rails 3.1

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

Y el proveedor de mapas buscó directamente el objeto de ubicación.

RKObjectMapping* locationMapping = [RKObjectMapping mappingForClass:[RKLocation class]]; 
[locationMapping mapKeyPath:@"id" toAttribute:@"locationId"]; 
... 
[objectManager.mappingProvider setMapping:locationMapping forKeyPath:@"location"]; 

Ahora cuando se actualiza a 3.1.0 rieles del nodo raíz "localización" se retira ahora de forma predeterminada y no estoy seguro de cómo configurar el proveedor de mapeo sin ella? Intenté nada y busqué métodos alternativos pero no tuve éxito.

¿Sabes cómo hacer un mapa de esto? ¡Por favor ayuda!

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

Respuesta

7

Desde el lado RestKit, no sé, pero a partir de this topic parece que se puede obtener el JSON de nuevo a lo RestKit espera haciendo:

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

Editar: Para completar, así es como usted lo haría con RestKit:

RKObjectMapping* locationMapping = [RKObjectMapping mappingForClass:[RKLocation class]]; 
[locationMapping mapKeyPath:@"id" toAttribute:@"locationId"]; 
... 
[objectManager.mappingProvider addObjectMapping:locationMapping]; 

Y luego llamar al asignador más tarde:

RKObjectMapping* locationMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[RKLocation class]]; 
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/locations" objectMapping:locationMapping delegate:self]; 

Y luego manejaría los objetos en los métodos de delegado RKObjectLoader.

4

En RestKit, se puede registrar un mapeo para contener un nombre de modelo de la raíz de esta manera:

[objectManager.mappingProvider registerMapping:locationMapping withRootKeyPath:@"location"]; 
0

Respuesta corta y dulce: forKeyPath:@"" va a funcionar.