2011-08-09 72 views
4

这是一个相对简单的,我非常确定它的正确语法。响应多个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组成的新对象吗?

回答

14

你能真正做到这一点,像这样:

万一
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 

编辑:

回答你的问题,你不一定要解析回应,这只是我通常盟友呢。还有一些是为你做它的功能马上,例如:

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

}); 
+0

至于对jQuery我只是想弄清楚你的意思是我会当解析JSON回单独的JSON元素的从服务器收到? – overtone

+0

这就是我看起来的样子。听起来很合理。 –

+0

正确 - 响应必须是* 1 * json对象...然后在获得响应后可以进一步将其分解。这就是为什么Rails只发送一个而忽略其他的 - 你只能发送一个! – DGM