2011-06-28 29 views
8

Trong Rails 3.0.8, json chứa phần tử gốc với tên model của bạn. Ví dụ: mô hình Vị trí của tôi.Bản đồ RestKit với Rails 3.1

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

Và nhà cung cấp bản đồ trực tiếp tìm đối tượng vị trí.

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

Bây giờ khi bạn nâng cấp lên đường ray 3.1.0 nút gốc "vị trí" hiện bị xóa theo mặc định và tôi không biết cách định cấu hình nhà cung cấp bản đồ mà không có nó? Tôi đã thử nil và tìm kiếm các phương pháp thay thế nhưng không thành công.

Bạn có biết cách ánh xạ điều này không? Hãy giúp tôi!

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

Trả lời

7

Từ phía RestKit, tôi không biết, nhưng từ this topic có vẻ như bạn có thể nhận được json lại những gì RestKit hy vọng bằng cách thực hiện:

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

Edit: Để hoàn chỉnh, dưới đây là cách bạn muốn làm điều đó với RestKit:

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

Và sau đó gọi các mapper sau:

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

Và sau đó bạn sẽ xử lý các đối tượng trong phương thức ủy quyền RKObjectLoader.

4

Trong RestKit, bạn có thể đăng ký một bản đồ để chứa một tên mô hình gốc như thế này:

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

Câu trả lời ngắn và ngọt ngào: forKeyPath:@"" sẽ làm việc.

Các vấn đề liên quan