我在我的项目中使用json api资源gem。
我已经设置了一个简单的资源
module V1
class ExpectedPaymentResource < JSONAPI::Resource
attributes :registration_id, :invoiced_amount_due, :date_due, :status, :created_at, :updated_at
end
end
在我的控制器中,我从服务
获得一组ExpectedPayments对象expected_payments = CreateExpectedPayments.new(registration_params).call
我现在需要以json api格式返回expected_payments
。所以根据我的理解,我应该使用serializer
我这样做
render json: JSONAPI::ResourceSerializer.new(ExpectedPaymentResource).serialize_to_hash(ExpectedPaymentResource.new(expected_payments, nil))
我得到<NoMethodError: undefined method 'id' for <Array:0x005642734fa6f8>>
然后我尝试了:
render json: JSONAPI::ResourceSerializer.new(ExpectedPaymentResource).serialize_to_hash(ExpectedPaymentResource.new(expected_payments[0], nil))
这适用于数组中的第一个对象。
documentation说&#34; ResourceSerializer
有一个serialize_to_hash
方法,它将资源实例或资源实例数组序列化。&#34;
如何让它与一组资源实例一起使用?我无法在文档中看到任何示例。
答案 0 :(得分:1)
如果您使用的是Rails。请尝试使用active_model_serializer,它会将约定优于配置引入JSON生成。
https://github.com/rails-api/active_model_serializers
一旦开始使用AMS,Yon可以停止错误地生成JSON响应。
以下是AMS的入门指南,
https://github.com/rails-api/active_model_serializers/blob/master/docs/general/getting_started.md