2011-06-28 28 views
7

Trong ứng dụng đường ray, tôi có một hành động trả về biểu diễn json của một tập hợp các mô hình khác nhau. Có vẻ một cái gì đó như thế này:Rails 3 respond_to json, với các thuộc tính/phương thức tùy chỉnh

respond_to :json 

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

Tuy nhiên, tôi muốn tùy chỉnh các thuộc tính và phương pháp được truyền cho các đối tượng json. Một chút như:

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

Làm việc trên, khiến cho đại diện json của "xe" để được thoát như một chuỗi lớn, như:

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

Rõ ràng là tôi đang tiếp cận này một cách sai lầm . ai đó có thể chỉ cho tôi phương hướng đúng không?

Trả lời

12

Vì bạn đang làm tổ các to_json trong Hash khác, tôi nghĩ rằng bạn cần phải sử dụng as_json (mà trả về một Hash thay vì một String) thay vì:

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

điểm trên! Cảm ơn bạn. (sẽ chấp nhận câu trả lời này ngay khi tôi được phép) – aaronrussell

Các vấn đề liên quan