2015-06-08 44 views
0

我正在使用Rails 4.2和Ruby 2.1.5如何獲取JSON格式的多個圖層?

我創建了兩個表1.API(name:string)和2.Description(key:string,value:string)。對於關係API has_many Datas。

以下是我用JSON格式返回數據的控制器索引操作。

def show 
    @api = Api.find(params[:id]) 
    @descriptions = @api.descriptions.all 
    data = {} 
    @descriptions.each do |f| 
    data[f.key] = f.value 
    end 
    render json: data, :except => [:created_at, :id, :api_id ] 
end 

並且它可以像JSON返回數據:

{ 
    "country":"USA" 
    "City":"NY" 
} 

我的問題是我應該如何得到數據如下圖所示(多JSON數據)。

{ 
    "country":{ 
       "Taiwan":"Taipei", 
       "China":"Hong Kong", 
       "England":"Londan" 
      }, 

    "password_type":"known", 
    "password":"123456" 
} 

我應該如何重新設計我的數據庫或任何其他方式?

+0

你能發佈數據'@ description'對象有? – Surya

+0

描述表有兩列(鍵和值)。在視圖模板中,我設計了一個輸入框可以讓用戶輸入值。 – Dreams

回答

0

我會建議爲此實現模板處理程序。 Ryan Bates已經錄製了一個很棒的視頻,請查看:Railscasts PRO #379 Template Handlers(還有一個關聯的github回購示例應用here)。

考慮到這一點,你只需結束控制器動作渲染json.rb模板,它包含以下技巧:

# app/views/apis/show.json.rb 

def list_of_countries 
    @descriptions.inject({}) do |result, object| 
    result[object["country"]] = object["city"] 
    result 
    end 
    # => {"USA": "NY", "Great Britain": "London"} 
end 

{ 
    country: list_of_countries, 
    password_type: @password_type # I assume you've set this up in controller 
}.end.to_json 
# {country: {"USA": "NY", "Great Britain": "London"}, password_type: "salt"}