【问题标题】:How to return nested comments using API in Rails如何在 Rails 中使用 API 返回嵌套注释
【发布时间】:2012-07-05 08:21:38
【问题描述】:

每辆汽车都有has_many :comments关联

我有以下方法来还车:

 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"}]}]

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 json api


    【解决方案1】:
    comments = Comment.join(:car).merge(Car.most_recent(params[:how_recent]))
    

    如果您想要自定义 json 输出,请使用 rabl gem

    【讨论】:

    • 我同意。 rabl gem 非常适合任何更复杂的东西。
    【解决方案2】:

    当呈现为 json 时,您可以传递一些额外的参数,如图所示 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
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 2011-05-17
      • 2014-11-27
      • 2012-08-03
      • 2021-11-03
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多