使用多个JSON渲染进行响应。 (ruby/ Rails)的

这是一个相对简单的,我很确定它只是语法。

我试图将多个对象渲染为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组成的新对象?

你实际上可以这样做:

 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 

等等

编辑:

回答你的问题,你不一定要解析回应,这正是我通常所做的。 有很多function可以立即为您完成,例如:

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