Ruby on rails 使用哈希生成JSON

Ruby on rails 使用哈希生成JSON,ruby-on-rails,ruby,json,hash,Ruby On Rails,Ruby,Json,Hash,我正在创建一个散列,它将生成要在API中使用的JSON 要制作哈希,我尝试以下方法: presses = Press.select(:id, :name) pulls = Pull.select(:id, :name) response = {list: {presses: presses, pulls: pulls}} 实际效果良好,并产生: {"list":{ "presses":[ {"id":1,"name":"p40"}, {"id":2,"name":"p4

我正在创建一个散列,它将生成要在API中使用的JSON

要制作哈希,我尝试以下方法:

presses = Press.select(:id, :name)
pulls = Pull.select(:id, :name)
response = {list: {presses: presses, pulls: pulls}}
实际效果良好,并产生:

{"list":{
  "presses":[
     {"id":1,"name":"p40"},
     {"id":2,"name":"p41"}],

  "pulls":[
     {"id":1,"name":"Best Effort"},
     {"id":2,"name":"First Good"}]
}}
但要求已经改变,使其类似于:

{"list":{
  "presses":[
     {"id":1,"name":"p40"
     "pulls":[
       {"id":1,"name":"Best Effort"},
       {"id":2,"name":"First Good"}]},

     {"id":2,"name":"p41"
     "pulls":[
       {"id":1,"name":"Best Effort"},
       {"id":2,"name":"First Good"}]},
     ],
}}

注意每个
按下对象
都应包含所有
拉动对象
。到目前为止,我不知道如何做到这一点。有什么想法吗?

我想这是Rails的问题。所以我有办法。这是我的尝试

presses = Press.select(:id, :name)
pulls = Pull.select(:id, :name)

response = { list: {
  presses: presses.map do |press|
    press.attributes.merge(pulls: pulls.map(&:attributes))
  end
}
}.to_json

这会满足你的要求

pulls = Pull.select(:id, :name)
presses = Press.select(:id, :name)
presses = presses.collect do |press|
    press.merge({pulls: pulls})
end
response = {list: {presses: presses}}

太好了,伙计!我还有很多其他属性,所以我只选择了其中的几个。还有唐;不需要使用json,因为默认格式是json。@G.B您只需将帖子标记为Rails即可。。否则,该答案无效。:-)没问题,如果有人偶然发现了这一点,尽管至少有一个纯ruby版本。