我试图让postgres_ext-串行宝石的工作,和我建立了一个测试项目非常相似,https://github.com/dockyard/postgres_ext-serializers/blob/master/test/test_helper.rb如何使用postgres_ext-serializers获取嵌套的JSON /哈希元素?
class UserSerializer < ActiveModel::Serializer
attributes :id, :name, :mobile
embed :ids, include: true
has_one :address, serializer: AddressSerializer
def include_mobile?
false
end
alias_method :include_address?, :include_mobile?
end
class AddressSerializer < ActiveModel::Serializer
attributes :id, :district_name
embed :ids, include: true
end
当我尝试运行串行输出似乎不具有嵌套元素。例如我的串行器to_json输出是:
“{\”users \“:[{\”id \“:1,\”name \“:\”Aaron \“,\”mobile \“:null} ,\“{\”id \“:\”name \“:\”Bob \“,\”mobile \“:null}],\”addresses \“:[{\”id \“: \“district_name \”:\“Rob's Address \”}}}“
请注意,用户和地址是散列的两个单独元素,即嵌套intead。如果我删除了postgres_ext-serializers gem,那么输出如预期:
“[{\”id \“:1,\”name \“:\”Rob \“,\”mobile \“:null ,\“地址\”:{\“id \”:1,\“district_name \”:\“Rob's Address \”}},{\“id \”:2,\“name \”:\“Bob \ “,\”mobile \“:null,\”address \“:null}]”
地址嵌入在用户哈希中,正是我期待的。
我错过了什么,当使用postgres_ext-serializers时,是否需要更改任何内容以使元素嵌套?
谢谢!
是的,这很有趣......你认为输出的格式一样,由于Postgres的JSON功能限制,或者这是一个优选的JSON输出我想这在技术上可以节省重复?我见过的所有apis通常都有完整的嵌套对象,而不仅仅是引用顶级对象的ID? – Hawk
我有'postgres_ext-serializers'的代码审查过,似乎没有'has_one'关系的特殊情况,不像'has_many'和'belongs_to'。它看起来与'active_model_serializers' gem不一致,请在GitHub上打开一个问题,看看创建者对它的看法。目前,我建议你在'AddressSerializer'的属性列表中添加'user_id'字段。至少,您将能够从生成的JSON中恢复'User'和'Address'模型之间的关系。 – Featalion