2011-06-28 16 views
7

W aplikacji railsowej mam operację, która zwraca jsonową reprezentację zbioru różnych modeli. Wygląda coś takiego:Szyny 3 reply_to json, z niestandardowymi atrybutami/metodami

respond_to :json 

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

Jednakże chcę, aby dostosować atrybuty i metody, które są przekazywane do obiektu JSON. Trochę jak:

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

robi powyżej, powoduje reprezentacji json z „samochody” być ocalałem jako jeden wielki ciąg, jak:

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

oczywiście jestem zbliża to w niewłaściwy sposób . Czy ktoś może wskazać mi właściwy kierunek?

Odpowiedz

12

Skoro zagnieżdżanie się to_json w innym Hash, myślę, że trzeba użyć as_json (która zwraca Hash zamiast String) zamiast:

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

na miejscu! Dziękuję Ci. (zaakceptuje tę odpowiedź tak szybko, jak tylko będę mógł) – aaronrussell