我试图覆盖多态关系的默认序列化程序。我有:
class NotificationListSerializer < ActiveModel::Serializer
attributes :id, :title
belongs_to :notifiable, polymorphic: true
end
如果notifiable
是组织,则使用OrganizationSerializer序列化组织。如果notifiable
是一个组,则使用GroupSerializer序列化该组。这很有道理,但是如何指定不同的序列化器,具体取决于类?
例如,如果notifiable
是一个组织,我想使用SparseOrganizationSerializer而不是OrganizationSerializer。我怎样才能做到这一点?
我很确定这是有记录的,但我很难跟踪并找到任何例子。
多态关系
通过指定关系来序列化多态关系,就像任何其他关联一样。例如:
class PictureSerializer < ActiveModel::Serializer has_one :imageable end
您可以通过覆盖serializer_for来指定序列化程序。有关多态关系的更多上下文,请参阅每个适配器的测试。
覆盖关联序列化程序查找
如果要为关联定义特定的序列化程序查找,可以覆盖ActiveModel :: Serializer.serializer_for方法,以根据定义的条件返回序列化程序类。
class MySerializer < ActiveModel::Serializer def self.serializer_for(model, options) return SparseAdminSerializer if model.class == 'Admin' super end # the rest of the serializer end
答案 0 :(得分:0)
您可以使用belongs_to:notifiable with&amp; block选项在那里指定适合的序列化程序。