2013-06-13 26 views
0

我有幾個ActiveRecord對象,如CityCountryState等我的控制器動作就像是(作爲代表性的例子):Rabl的ActiveRecord的集合的嵌套哈希

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

如果我是你,我甚至不會在意去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