2012-07-04 3 views
1

Каждый автомобилей имеет has_many :comments ассоциацииКак вернуть вложенные комментарии, используя API в Rails

Я следующий способ вернуть свои автомобили:

class Api::V1::CarsController < Api::V1::BaseController 
    def recent 
     recent = Car.most_recent(params[:how_recent]) 
     comments = recent.each{|r| r.comments} ## ?? 
     respond_with(:recent => recent) 
    end 
    end 

я получаю последние автомобилей:

curl -X GET http://cars.dev/api/v1/cars/recent -d "token=zzxWkB3SzDP3U1wDsJbY" -d "how_recent=20" 

И я хотел бы получить ответ вроде этого:

"recent_with_comments":{"recent":[{"type":"ferrari","price":null,"user_id":78,"username":null,"comments":[{"id":1, "comment": "some text"},{"id":2, "comment": "some text 2"}]}] 

ответ

2

При рендеринге в формате JSON можно передать некоторые дополнительные Params, как показано http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/

базовый пример:

class Api::V1::CarsController < Api::V1::BaseController 
    def recent 
    recent = Car.most_recent(params[:how_recent]) 
    comments = recent.each{|r| r.comments} ## ?? 
    respond_to do |format| 
     format.html 
     format.json { render recent.as_json(:include => :comments) } 
    end 
    end 
end 
0
comments = Comment.join(:car).merge(Car.most_recent(params[:how_recent])) 

если и хотят выход использовать пользовательские JSON rabl камень

+0

Я согласен. Драгоценный камень rabl отлично подходит для чего-то более сложного. –

Смежные вопросы