2011-06-28 12 views
7

Bir raylar uygulamasında farklı modellerden oluşan bir koleksiyonun json temsilini döndüren bir eylemim var.Raylar 3 response_to json, özel nitelikleri/yöntemleri ile

respond_to :json 

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

Ancak, ben json nesnesine geçirilen özelliklerini ve yöntemlerini özelleştirmek istiyorum: Böyle şey görünüyor. Biraz gibi: Bu yanlış şekilde yaklaşan ediyorum Açıkçası

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

: Yukarıdaki Doing

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

gibi, tek bir büyük dize olarak kaçtı edilecek "otomobil" json temsilini neden olur . Beni doğru yöne yönlendiren var mı?

cevap

12

başka Hash yılında to_json iç içe kaldığınız için, bunun yerine (bir Hash yerine String a döndüren) as_json kullanmaya ihtiyacım var: üzerinde

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

Spot! Teşekkür ederim. (Bu cevabı izin verilir verilmez kabul eder) – aaronrussell