我正在尝试根据模型的属性(在父序列化程序中)动态指定序列化程序:
ActiveModel::Serializer.setup do |config|
config.embed = :ids
config.embed_in_root = true
end
class DocumentSerializer < ActiveModel::Serializer
attributes :id, :name, :document_layout
if attributes[:document_layout] === 'portrait'
has_many :pages, serializer: PortraitPageSerializer
elsif attributes[:document_layout] === 'landscape'
has_many :pages, serializer: LandscapePageSerializer
end
end
但这似乎不起作用(我猜属性不仅仅是一个哈希)。
有没有其他方法可以访问该值?或者我是否完全以错误的方式解决这个问题?
答案 0 :(得分:1)
正在考虑这个问题(自从我开始使用Serializers以来已经有一段时间了),这会有用吗?
class DocumentSerializer < ActiveModel::Serializer
attributes :id, :name
has_many :portrait_pages, key: pages, serializer: PortraitPageSerializer
has_many :landscape_pages, key: pages, serializer: LandscapePageSerializer
def portrait_pages
pages if object.document_layout === 'portrait'
end
def landscape_pages
pages if object.document_layout === 'landscape'
end
end
此处的另一个选项 - 将文档子类化为具有LandscapeDocument和PortraitDocument。这可以基于类型,它与您的document_layout字段对齐。一个想法...