我有两种导轨型号:
里程碑有很多任务 任务属于里程碑
在我的控制器中,我打电话给以下人员:
@milestones = Milestone.all
render :json => @milestones.to_json(:include => :tasks)
这给了我:
[ {
"id": 5,
"name": "This is milestone #1",
"tasks": [{
"complete": false,
"id": 60,
"name": "aaaaa",
"milestone_id": 5,
}, {
"complete": false,
"id": 62,
"name": "ccccc",
"milestone_id": 5,
}
]
}, {
"id": 6,
"name": "This is milestone #2",
"tasks": [{
"complete": false,
"id": 65,
"name": "ffffff",
"milestone_id": 5,
}, {
"complete": false,
"id": 66,
"name": "gggggg",
"milestone_id": 5,
}
]
}
但我需要能够轻松浏览JSON,所以我希望能够像这样格式化(注意每个“子数组”都标有“milestone_ID”或“task_ID”):
[
"milestone_5": {
"id": 5,
"name": "This is milestone #1",
"tasks": [
"task_60":{
"complete": false,
"id": 60,
"name": "aaaaa",
"milestone_id": 5,
},
"task_62":{
"complete": false,
"id": 62,
"name": "ccccc",
"milestone_id": 5,
}
]
},
"milestone_6":{
"id": 6,
"name": "This is milestone #2",
"tasks": [
"task_65":{
"complete": false,
"id": 65,
"name": "ffffff",
"milestone_id": 5,
},
"task_66":{
"complete": false,
"id": 66,
"name": "gggggg",
"milestone_id": 5,
}
]
}
有没有人知道如何让Rails自定义格式化JSON。即使我不得不丢失“milestone_”部分并且只是吐出ID,这将非常有帮助。
谢谢!
答案 0 :(得分:3)
看一下json_builder gem。
你所问的肯定是可行的,但是当你开始对控制器的json输出做任何远程有用的事情时,默认的to_json
方法变得难以处理。最好明确输出你希望json看起来的样子。
特别是在你的json_builder文件......
milestone.json.json_builder
@milestones.each do |milestone|
key "milestone_#{milestone.id}" do
id milestone.id
name milestone.name
end
end
等等。我相信这会成功。
编辑:我倾向于只包含我需要的模型中的确切字段,无论什么资源消耗我的json。这将提高性能,并在出现问题时更容易调试。很明显哪些领域会出现在哪里。