2011-06-28 30 views
7

在一個rails應用程序中,我有一個操作返回不同模型集合的json表示。它看起來東西這樣的:Rails 3 respond_to json,自定義屬性/方法

respond_to :json 

def index 
    @cars = Car.all 
    @vans = Van.all 
    respond_with({ 
    :cars => @cars, 
    :vans => @vans 
    }) 
end 

不過,我想自定義傳遞給JSON對象的屬性和方法。如A位:

respond_with({ 
    :cars => @cars.to_json(:only => [:make, :model], :methods => [:full_name]), 
    :vans => @vans 
}) 

做以上,使「車」被轉義爲一個大的字符串的JSON表示,如:

{ 
    "cars":"[{\"car\":{\"make\":\"Ford\" ... etc 
    "vans": [{"van":{"make":"Citreon" ... vans not escaped 
} 

很顯然,我處理這個錯誤的方式。任何人都可以將我指向正確的方向嗎?

回答

12

既然你在另一個Hash嵌套to_json,我認爲你需要使用as_json(返回的Hash而不是String)代替:

respond_with({ 
    :cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]), 
    :vans => @vans 
}) 
+0

點上!謝謝。 (只要我被允許,我會盡快接受這個答案) – aaronrussell