在仅 Rails 5 API 的应用程序中使用 Ransack

Using Ransack in a Rails 5 API only application

我最近开始开发仅 Rails 5 API 的应用程序,我包括 jsonapi-resources 以及 ransack 以轻松过滤任何给定请求的结果。默认情况下,jsonapi-resources 提供基本的 CRUD 功能,但为了插入 ransack 的搜索参数,我需要覆盖控制器中的默认索引方法:

class CarsController < JSONAPI::ResourceController

  def index
    @cars = Car.ransack(params[:q]).result
    render json: @cars
  end

end

现在,这工作正常,但它不再使用 jsonapi-resources 生成 JSON 输出,这意味着输出从:

# ORIGINAL OUTPUT STRUCTURE
{"data": [
  {
    "id": "3881",
    "type": "cars",
    "links": {
      "self": ...
    },
    "attributes": {
      ...
    }
  }]
}

默认Rails JSON输出:

[{
  "id": "3881",
  "attr_1": "some value",
  "attr_2": "some other value"
}]

如何在这个控制器中修补索引方法时保持原始输出结构?

尝试使用gemhttps://github.com/tiagopog/jsonapi-utils。在你的情况下,问题将以这种方式解决:

class CarsController < JSONAPI::ResourceController
  include JSONAPI::Utils

  def index
    @cars = Car.ransack(params[:q]).result
    jsonapi_render json: @cars
  end
end