Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从多个rails模型返回json数据?_Ruby On Rails_Json - Fatal编程技术网

Ruby on rails 如何从多个rails模型返回json数据?

Ruby on rails 如何从多个rails模型返回json数据?,ruby-on-rails,json,Ruby On Rails,Json,我已经创建了一个后端rails服务器,它严格地为我构建的iOS应用服务。在首次加载iOS应用程序时,它需要立即输入十几个型号及其数据。我希望避免1)12个单独的服务器调用,以及b)将这12个调用链接到完成块中。即呼叫A,当A完成时,呼叫B,当B完成时,呼叫C。。。等等 我想制作一个加载资源。可以在一次调用中返回所有十几个模型的数据。因此,生成的json将类似于 { "widgets": [ { "id": 1, "desc"

我已经创建了一个后端rails服务器,它严格地为我构建的iOS应用服务。在首次加载iOS应用程序时,它需要立即输入十几个型号及其数据。我希望避免1)12个单独的服务器调用,以及b)将这12个调用链接到完成块中。即呼叫A,当A完成时,呼叫B,当B完成时,呼叫C。。。等等

我想制作一个加载资源。可以在一次调用中返回所有十几个模型的数据。因此,生成的json将类似于

{
    "widgets": [
        {
            "id": 1,
            "desc": "One"
        },
        {
            "id": 2,
            "desc": "Two"
        }
    ],
    "gadgets": [
        {
            "id": 1,
            "desc": "One"
        }
    ],      
    "flidgets": [
        {
            "id": 1,
            "desc": "One"
        }
    ]
}
我也希望不包括时间戳


我该怎么做?假设我创建了一个新的控制器InitialLoadController。然后我得到十几个对象的模型数据。我如何将十几个模型呈现为json并将其格式化为以下格式?

请检查以下代码:

class InitialLoadsController < ApplicationController
  def load
    widgets = Widget.select(:id, :desc)
    gadgets = Gadget.select(:id, :desc)
    flidgets = Flidget.select(:id, :desc)
    response = {
      widgets: widgets,
      gadgets: gadgets,
      flidgets: flidgets
    }
    render json: response
  end

end
class InitialLoadsController

甚至您也可以使用jbuilder呈现json响应(作为呈现json:response的替代方案)。

假设您有仪表板操作,您可以使用下面的代码从多个模型返回json数据

def dashboard
    @widgets = Widget.all
    @gadgets = Gadget.all
    @flidgets = Flidget.all

     respond_to do |format|
      format.json {
        render :json => {
           :widgets => @widgets.to_json(:except => [:created_at,:size]),
           :gadgets => @gadgets.to_json(:except => [:created_at,:type]),
           :flidgets => @flidgets.to_json(:except => [:created_at,:type])
        }
      }
     end
end
注意:-@widgets.to_json(:except=>[:created_at,:type]) 这将返回json,但不包含在创建的字段和Rails在scaffolding中使用的类型。