活动模型序列化程序 has_many 关联不起作用
active model serializer has_many association not working
我有两个关联模型,parent= Activity
,它 has_many 与 Cost 的关联。
我进行了 API 调用以获取使用序列化程序的 activity 详细信息,并且还想添加 Cost 序列化。所以在 ActivitySerializer 中我试过这个:
Class ActivitySerializer: < ActiveModel::Serializer
ActiveModel::Serializer.config.key_transform = :unaltered
attributes :id,
:name,
:description
...
has_many costs, each_serializer: CostSerializer
end
CostSerializer 如下所示:
class CostSerializer < ActiveModel::Serializer
ActiveModel::Serializer.config.key_transform = :unaltered
attributes :id,
:amount,
:description
end
结果是 Activity 数据看起来不错,但成本数据给我的是:
relationships":{"costs":{"data":[{"id":"20","type":"costs"}]}
不确定为什么数量和描述会丢失。
如果我这样做,它会起作用(将 listCosts 添加到 ActivitySerializer 中的属性):
def listCosts
object.costs.map do |cost|
CostSerializer.new(cost, scope:scope, root: false, event: object)
end
end
输出有点不同,没有关系,但有我想要的序列化器属性。
我正在使用 Rails 5.1.3 和 AMS 0.10。
我假设您使用的是 json_api 适配器。根据 http://jsonapi.org/examples/ 中 JSON API 规范的示例,关联模型的 "type" 和 "id" 以外的任何其他属性都可以通过"included"属性。您可以查看讨论
https://github.com/rails-api/active_model_serializers/issues/1056
我有两个关联模型,parent= Activity
,它 has_many 与 Cost 的关联。
我进行了 API 调用以获取使用序列化程序的 activity 详细信息,并且还想添加 Cost 序列化。所以在 ActivitySerializer 中我试过这个:
Class ActivitySerializer: < ActiveModel::Serializer
ActiveModel::Serializer.config.key_transform = :unaltered
attributes :id,
:name,
:description
...
has_many costs, each_serializer: CostSerializer
end
CostSerializer 如下所示:
class CostSerializer < ActiveModel::Serializer
ActiveModel::Serializer.config.key_transform = :unaltered
attributes :id,
:amount,
:description
end
结果是 Activity 数据看起来不错,但成本数据给我的是:
relationships":{"costs":{"data":[{"id":"20","type":"costs"}]}
不确定为什么数量和描述会丢失。 如果我这样做,它会起作用(将 listCosts 添加到 ActivitySerializer 中的属性):
def listCosts
object.costs.map do |cost|
CostSerializer.new(cost, scope:scope, root: false, event: object)
end
end
输出有点不同,没有关系,但有我想要的序列化器属性。 我正在使用 Rails 5.1.3 和 AMS 0.10。
我假设您使用的是 json_api 适配器。根据 http://jsonapi.org/examples/ 中 JSON API 规范的示例,关联模型的 "type" 和 "id" 以外的任何其他属性都可以通过"included"属性。您可以查看讨论 https://github.com/rails-api/active_model_serializers/issues/1056