Mat*_*att 5 ruby-on-rails polymorphic-associations active-model-serializers
我正在尝试覆盖多态关系的默认序列化器。我有:
class NotificationListSerializer < ActiveModel::Serializer
  attributes :id, :title
  belongs_to :notifiable, polymorphic: true
end
如果notifiable是一个组织,则使用 OrganizationSerializer 对该组织进行序列化。如果notifiable是一个 Group,则使用 GroupSerializer 序列化该组。这是完全有道理的,但是我如何根据类指定不同的序列化器?
例如,如果notifiable是一个组织,我想使用 SparseOrganizationSerializer 而不是 OrganizationSerializer。我怎样才能实现这个目标?
我很确定这已记录在案,但我很难跟踪并找到任何示例。
从文档中:
多态关系
与任何其他关联一样,多态关系是通过指定关系来序列化的。例如:
Run Code Online (Sandbox Code Playgroud)class PictureSerializer < ActiveModel::Serializer has_one :imageable end您可以通过覆盖serializer_for来指定序列化器。有关多态关系的更多上下文,请参阅每个适配器的测试。
覆盖关联序列化器查找
如果要为关联定义特定的序列化器查找,可以重写 ActiveModel::Serializer.serializer_for 方法以根据定义的条件返回序列化器类。
Run Code Online (Sandbox Code Playgroud)class MySerializer < ActiveModel::Serializer def self.serializer_for(model, options) return SparseAdminSerializer if model.class == 'Admin' super end # the rest of the serializer end
| 归档时间: | 
 | 
| 查看次数: | 2185 次 | 
| 最近记录: |