Json Api资源|响应对象数组

时间:2017-02-14 13:35:48

标签: ruby-on-rails api json-api jsonapi-resources

我在我的项目中使用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;

如何让它与一组资源实例一起使用?我无法在文档中看到任何示例。

1 个答案:

答案 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