我有两个 rails 模型:
一个里程碑有很多任务 一个任务属于一个里程碑
在我的 Controller 中,我调用了以下内容:
@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,这也会非常有帮助。
谢谢!
最佳答案
看看 json_builder gem 。
您的要求当然是可行的,但就个人而言,当您开始使用 Controller 的 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 的任何资源,我倾向于只包含我需要的模型中的确切字段。这将提高性能,并可以在出现问题时更容易调试。哪些字段将显示在何处也非常明显。
关于javascript - 来自 Rails Controller 的 JSON 自定义格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367652/