在仅 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
我最近开始开发仅 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