如何在自定义控制器操作中呈现 jsonapi-resources 响应?
How to render a jsonapi-resources response in an custom controller action?
我通过覆盖 JSONAPI::ResourceController 控制器中的创建操作实现了我自己的对象创建逻辑。
创建成功后,我想渲染创建的对象表示。
如何使用 jsonapi-resources gem?
呈现这个自动生成的 JSON API 响应
调用 super 方法也会触发默认的资源创建逻辑,所以这对我来说不起作用。
class Api::V1::TransactionsController < JSONAPI::ResourceController
def create
@transaction = Transaction.create_from_api_request(request.headers, params)
# render automatic generated JSON API response (object representation)
end
end
render json: JSON.pretty_generate( JSON.parse @transaction )
def render_json
result =
begin
block_given? ? { success: true, data: yield } : { success: true }
rescue => e
json_error_response(e)
end
render json: result.to_json
end
def json_error_response(e)
Rails.logger.error(e.message)
response = { success: false, errors: e.message }
render json: response.to_json
end
render_json { values }
你可以这样做:
class UsersController < JSONAPI::ResourceController
def create
user = create_user_from(request_params)
render json: serialize_user(user)
end
def serialize_user(user)
JSONAPI::ResourceSerializer
.new(UserResource)
.serialize_to_hash(UserResource.new(user, nil))
end
end
这样你会得到一个 json 符合 Jsonapi 标准的响应
我通过覆盖 JSONAPI::ResourceController 控制器中的创建操作实现了我自己的对象创建逻辑。
创建成功后,我想渲染创建的对象表示。
如何使用 jsonapi-resources gem?
呈现这个自动生成的 JSON API 响应调用 super 方法也会触发默认的资源创建逻辑,所以这对我来说不起作用。
class Api::V1::TransactionsController < JSONAPI::ResourceController
def create
@transaction = Transaction.create_from_api_request(request.headers, params)
# render automatic generated JSON API response (object representation)
end
end
render json: JSON.pretty_generate( JSON.parse @transaction )
def render_json
result =
begin
block_given? ? { success: true, data: yield } : { success: true }
rescue => e
json_error_response(e)
end
render json: result.to_json
end
def json_error_response(e)
Rails.logger.error(e.message)
response = { success: false, errors: e.message }
render json: response.to_json
end
render_json { values }
你可以这样做:
class UsersController < JSONAPI::ResourceController
def create
user = create_user_from(request_params)
render json: serialize_user(user)
end
def serialize_user(user)
JSONAPI::ResourceSerializer
.new(UserResource)
.serialize_to_hash(UserResource.new(user, nil))
end
end
这样你会得到一个 json 符合 Jsonapi 标准的响应