使用多个 JSON 渲染进行响应。 (红宝石/Rails)

发布于 2024-11-28 19:00:34 字数 601 浏览 1 评论 0原文

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

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

This is a relatively simple one and I'm pretty sure its just syntax.

Im trying to render multiple objects as json as a response in a controller. So something like this:

  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 

Problem is I'm only getting a single json back and its always the top one. Is there any way to render multiple objects this way?

Or should I create a new object made up of other objects.to_json?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一袭水袖舞倾城 2024-12-05 19:00:34

你实际上可以这样做:

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,
      ...

});

you could actually do it like so:

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

in case you use jquery you will need to do something like:

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

and so on

EDIT:

answering your question, you don't necessarily have to parse the response, it's just what I usually do. There's a number of functions that do it for you right away, for example:

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

});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文