我試圖讓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