响应多个 JSON 渲染。 (红宝石/导轨)
Posted
技术标签:
【中文标题】响应多个 JSON 渲染。 (红宝石/导轨)【英文标题】:responding with multiple JSON renders. (Ruby/Rails) 【发布时间】:2011-08-09 11:45:46 【问题描述】:这是一个相对简单的,我很确定它只是语法。
我试图将多个对象呈现为 json 作为控制器中的响应。所以是这样的:
def info
@allWebsites = Website.all
@allPages = Page.all
@allElementTypes = ElementType.all
@allElementData = ElementData.all
respond_to do |format|
format.jsonrender :json => @allWebsites
format.jsonrender :json =>@allPages
format.jsonrender :json =>@allElementTypes
format.jsonrender :json =>@allElementData
end
end
end
问题是我只得到一个 json 并且它总是最重要的。有没有办法以这种方式渲染多个对象?
或者我应该创建一个由其他 objects.to_json 组成的新对象?
【问题讨论】:
【参考方案1】:你实际上可以这样做:
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,
...
);
【讨论】:
关于 Jquery,我只是想澄清一下,您的意思是说,当从服务器接收到 json 时,我必须将其解析回单独的 json 元素? 对我来说就是这样。听起来很合理。 正确 - 响应必须是 one json 对象...然后您可以在收到响应后进一步分解它。这就是为什么 rails 只发送一个而忽略其他的 - 你只能发送一个! 我该怎么办:element => @element, :only => [:id, :property], :include => :assoc
?以上是关于响应多个 JSON 渲染。 (红宝石/导轨)的主要内容,如果未能解决你的问题,请参考以下文章