2
我想覆盖多态关系的默认串行器。我有:Ruby on Rails:为多态关联设置特定的串行器
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
你有没有找到一个很好的解决方案。此外,有什么想法来防止这些多态串行器的n + 1加载? –
如果有其他人遇到问题,我实际上需要model.class.to_s而不是model.class – Marky