отвечая с несколькими рендерами JSON. (Рубин / Рельсы) - PullRequest
4 голосов
/ 09 августа 2011

Это относительно простой, и я уверен, что это просто синтаксис.

Я пытаюсь отобразить несколько объектов как json в качестве ответа в контроллере.Итак, что-то вроде этого:

  def info
    @allWebsites = Website.all
    @allPages = Page.all
    @allElementTypes = ElementType.all
    @allElementData = ElementData.all


    respond_to do |format|
      format.json{render :json => @allWebsites}
      format.json{render :json =>@allPages}  
      format.json{render :json =>@allElementTypes}  
      format.json{render :json =>@allElementData}
      end
    end
  end 

Проблема в том, что я получаю только один JSON, и он всегда лучший.Есть ли способ визуализировать несколько объектов таким образом?

Или я должен создать новый объект, составленный из других objects.to_json?

1 Ответ

14 голосов
/ 09 августа 2011

вы могли бы сделать это так:

format.json {
   render :json => {
      :websites => @allWebsites,
      :pages => @allPages,
      :element_types => @AllElementTypes,
      :element_data => @AllElementData
   }
}

если вы используете jquery, вам нужно будет сделать что-то вроде:

data = $.parseJSON( xhr.responseText );
data.websites #=> @allWebsites data from your controller
data.pages #=> @allPages data from your controller

и т. Д.

EDIT:

отвечая на ваш вопрос, вам не обязательно разбирать ответ, это просто то, что я обычно делаю. Есть ряд функций, которые делают это для вас сразу, например:

$.getJSON('/info', function(data) {
  var websites = data.websites,
      pages = data.pages,
      ...

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...