我有一些ActiveRecord
对象,例如City
,Country
,State
等。我的控制器操作就像(作为代表示例):
def get_data
@data = {
cities: City.limit(2),
countries: Country.limit(2),
states: State.limit(2),
version: 1000
}
respond_with @data
end
我想渲染一个JSON,如:
{
data: {
country: [{id: 1, name: 'a'}, {id: 2, name: 'b'}],
state: [{id: 1, name: 'p'}, {id: 2, name: 'q'}],
city: [{id: 1, name: 'x'}, {id: 2, name: 'y'}],
version: 1000
}
}
(请注意收藏的单数键,请不要建议更改JSON结构,因为它已修复。)
此rabl
模板应该是什么?我一直在打破这个问题几个小时。
答案 0 :(得分:0)
如果我是你,我甚至不会为了这个而使用rabl模板,因为你用这段代码创建的是:
@data = {
cities: City.limit(2),
countries: Country.limit(2),
states: State.limit(2),
version: 1000
}
是最终输出,而不是单个组件。
您可以将其替换为:
render :json => {
:data => {
cities: City.limit(2).map{ |c|{:id => c[:id] },
countries: Country.limit(2).map{ |c|{:id => c[:id] },
states: State.limit(2).map{ |c|{:id => c[:id] },
version: 1000
}
}
它不是rabl的最佳用例,但是如果你仍然希望它通过rabl加载,这下面的get_data.json.rabl中的代码就可以了。
node :data do
{
:version_number => @data[:version_number],
:country => @data[:countries].map{ |c|{:id => c[:id] , :name => c[:name]} }
:state => @data[:states].map{ |s|{:id => s[:id] , :name => s[:name]} }
:city => @data[:city].map{ |c|{:id => c[:id] , :name => c[:name]} }
}
end