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