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

时间:2015-05-31 15:39:28

标签: ruby-on-rails json

我创建了一个后端rails服务器,它严格地为我构建的iOS应用程序提供服务。初次加载iOS应用程序时,需要立即提取大约十几个模型及其数据。我想避免1)十几个单独的服务器调用和b)在完成块中链接十几个调用。 I.E.呼叫A,当A完成时,呼叫B,当B完成时,呼叫C ......等等。

我想制作一个Load资源。在一次调用中将返回所有十几个模型的数据的东西。所以生成的json就像......

{
    "widgets": [
        {
            "id": 1,
            "desc": "One"
        },
        {
            "id": 2,
            "desc": "Two"
        }
    ],
    "gadgets": [
        {
            "id": 1,
            "desc": "One"
        }
    ],      
    "flidgets": [
        {
            "id": 1,
            "desc": "One"
        }
    ]
}

我也更喜欢不包含时间戳。

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

2 个答案:

答案 0 :(得分:0)

请检查以下代码:

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

即使您可以使用jbuilder渲染json响应(作为渲染json:response的替代方法)。

答案 1 :(得分:0)

假设您有可以在代码下方使用的仪表板操作,以从多个模型返回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 =&gt; [:created_at,:type]) 这将返回没有字段 created_at 类型

的json