我在我的rails-api应用程序中使用ActiveModel :: Serializer。 我有一个名为addonable的多态关联:
class AddOn < ActiveRecord::Base
belongs_to :addonable, polymorphic: true
end
class Container < ActiveRecord::Base
has_many :add_ons, as: :addonable
end
class Depot < ActiveRecord::Base
has_many :add_ons, as: :addonable
end
然后,我有两个不同的控制器,每个控制器返回一个不同的addonable(Container或Depot)。 我希望序列化程序返回带有类名的addonable关联:
class DepotSelectSerializer < ActiveModel::Serializer
attributes :id, :quantity
belongs_to :addonable, serializer: DepotSerializer, polymorphic: true
end
#returns: {:data=>{:id=>:string, :type=>:string, :attributes=>{:quantity=>:integer}, :relationships=>{:addonable=>{:data=>:object}}}}
#I want: {:data=>{:id=>:string, :type=>:string, :attributes=>{:quantity=>:integer}, :relationships=>{:depot=>{:data=>:object}}}}
我希望对象在关系哈希中,而不是在属性中,这就是为什么我不能使用自定义方法。
理想情况下,我会有类似的东西:
belongs_to :addonable, serializer: ContainerSerializer, polymorphic: true, as: :depot
但我找不到类似的东西。这可能吗? 提前致谢
答案 0 :(得分:0)
来自active_model_serializer
document,它描述了:
您还可以使用:serializer选项指定自定义序列化程序类,使用:polymorphic选项指定多态(STI)关联,例如:
has_many:comments,:serializer =&gt; CommentShortSerializer
has_one:reviewer,:polymorphic =&gt;真
序列化程序只关注多重性,而不是所有权。 belongs_to可以在序列化程序中使用has_one包含ActiveRecord关联。
因此,在您的情况下,请使用has_one
代替belongs_to
:
has_one :addonable, serializer: DepotSerializer, polymorphic: true
经过测试,它适用于我的项目!