簡體   English   中英

Active Model Serializer,每個型號都有不同的串行器

[英]Active Model Serializer with different serializer for each model

我正在使用ActiveModelSerializer 0.10。 我有一個我要序列化的Account集合。 有沒有辦法為集合中的每個模型設置特定的序列化器? 我希望我的控制器返回這樣的東西:

{"accounts":
  [
    {"type":"Group","groupname":"A group","internal_info":"Sensitive info"},
    {"type":"User","first_name":"Bob","last_name":"Smith","internal_info":"Sensitive info"}
  ]
}

我的API分為兩部分:用戶API和管理員API。 用戶API使用ActiveModelSerializer自動找到的標准序列化程序。 像這樣的東西

render json: @accounts

會返回此(注意不包括敏感信息):

{"accounts":
  [
    {"type":"Group","groupname":"A group"},
    {"type":"User","first_name":"Bob","last_name":"Smith"}
  ]
}

admin API使用自定義序列化程序(它們包含更多詳細信息,例如internal_info )。 如何在管理API中呈現此類集合? 我知道我可以使用

render json: @accounts, each_serializer: Admin::AccountSerializer

這在大多數情況下都能很好地工作,但在這種特殊情況下,我有兩種類型的Account 我可以以某種方式對集合中的Group對象使用Admin::Account::GroupSerializer ,對集合中的User對象User Admin::Accounts::UserSerializer嗎?

我最終使用Admin::AccountSerializer和條件。 歡迎更好的解決方案。

class AccountSerializer < ActiveModel::Serializer
  attribute :groupname, if: :a_group?

  attribute :first_name, if: :a_user?
  attribute :last_name, if: :a_user?

  def a_group?
    object.class == Group
  end

  def a_user?
    object.class == User
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM