2015-05-31 4 views
0

Я создал сервер backend rails, который строго служит приложению iOS, которое я создал. При первоначальной загрузке приложения iOS ему необходимо сразу же загрузить около дюжины моделей и их данных. Я хочу избежать 1) Десятки отдельных вызовов сервера и b) Цепочка дюжины вызовов в блоках завершения. И.Е. Вызов A, когда A завершен, вызовите B, когда B сделан, вызовите C ... и т. Д.Как я могу вернуть данные json из нескольких моделей рельсов?

Я бы хотел загрузить ресурс загрузки. Что-то, что вернет данные из всех десятков моделей за один вызов. Таким образом, в результате JSON будет что-то вроде ...

{ 
    "widgets": [ 
     { 
      "id": 1, 
      "desc": "One" 
     }, 
     { 
      "id": 2, 
      "desc": "Two" 
     } 
    ], 
    "gadgets": [ 
     { 
      "id": 1, 
      "desc": "One" 
     } 
    ],  
    "flidgets": [ 
     { 
      "id": 1, 
      "desc": "One" 
     } 
    ] 
} 

Я хотел бы также предпочитают не включают временные метки.

Как я могу это сделать? Предположим, я создаю новый контроллер InitialLoadController. Затем я получаю данные модели из моих десятков объектов. Как я могу представить дюжину моделей json и форматировать их так?

+0

Rails использований [ 'jbuilder' ] (https://github.com/rails/jbuilder) в лесах, просто чтобы вы знали. –

ответ

0

Пожалуйста, проверьте код ниже:

class InitialLoadsController < ApplicationController 
    def load 
    widgets = Widget.select(:id, :desc) 
    gadgets = Gadget.select(:id, :desc) 
    flidgets = Flidget.select(:id, :desc) 
    response = { 
     widgets: widgets, 
     gadgets: gadgets, 
     flidgets: flidgets 
    } 
    render json: response 
    end 

end 

Даже вы можете использовать JBuilder для визуализации ответа JSON (в качестве альтернативы для визуализации JSON: ответ).

0

Предположим, у вас есть действие панели инструментов, которое вы можете использовать ниже, чтобы возвращать данные json из нескольких моделей.

def dashboard 
    @widgets = Widget.all 
    @gadgets = Gadget.all 
    @flidgets = Flidget.all 

    respond_to do |format| 
     format.json { 
     render :json => { 
      :widgets => @widgets.to_json(:except => [:created_at,:size]), 
      :gadgets => @gadgets.to_json(:except => [:created_at,:type]), 
      :flidgets => @flidgets.to_json(:except => [:created_at,:type]) 
     } 
     } 
    end 
end 

Примечание: - @ widgets.to_json (: кроме => [: created_at, Тип]) это будет возвращать JSON без полей created_at и типа

Смежные вопросы