当我从我的Rails heroku站点获取JSON有效负载时(这是一个使用'generate scaffold'命令创建的基本简单测试站点),我得到这样的结果:
[
{"client":
{"name":"Fred Flintstone",
"id":3,
"room":"333",
},
{"client":
{"name":"Wilma Flintstone",
"id":4,
"room":"334",
}
}
我真的希望得到更符合KVC的东西,比如:
{"clients":
[
{"client":
{"name":"Fred Flintstone",
"id":3,
"room":"333",
},
{"client":
{"name":"Wilma Flintstone",
"id":4,
"room":"334",
}
}
]
}
有谁知道怎么做?在Ruby方面或Heroku方面是否有一些代码会给我这种格式?
库尔特
答案 0 :(得分:1)
在控制器中,而不是
render :json => @clients
DO
render :json => {@clients.first.class.name.underscore.pluralize => @clients}
或
render :json => {@clients.first.class.table_name => @clients}
这与heroku没有任何关系。
您可以使用以下方式打开/关闭生成的对象是否将对象的名称作为顶级键:
ActiveRecord::Base.include_root_in_json = true
但据我所知,没有配置选项来做你想要的事情。
请参阅http://apidock.com/rails/ActiveRecord/Serialization/to_json
如果您希望在多个控制器中执行此操作,则另一个选项是将此行为移至帮助程序并使用它。无论相关模型如何,上述逻辑都将起作用。
即:
def kvcize(array)
{array.first.class.table_name => array}
end
然后
render :json => kvcize(@clients)