如何以JSON格式获取多个图层?

时间:2015-06-08 08:45:19

标签: ruby-on-rails ruby json ruby-on-rails-4 database-design

我正在使用带有Ruby 2.1.5的rails 4.2

我创建了两个表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"
}  

我应该如何重新设计数据库或以其他方式?

1 个答案:

答案 0 :(得分:0)

我建议为此实现模板处理程序。 Ryan Bates录制了一个精彩的截屏视频,请查看:Railscasts PRO #379 Template Handlers(还有一个关联的github repo,带有示例应用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"}