[英]Rails active_model_serializers on polymorphic nested association
[英]active_model_serializers association as:
我在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(容器或倉庫)。 我希望序列化程序返回帶有其類名的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
但是我找不到類似的東西。 這可能嗎? 提前致謝
在active_model_serializer
文檔中 ,它描述了:
您也可以使用:serializer選項指定自定義序列化器類,並使用:polymorphic選項指定多態(STI)關聯,例如:
has_many:comments,:serializer => CommentShortSerializer
has_one:reviewer,:polymorphic => true
序列化程序僅關注多重性,而不關注所有權 。 可以在序列化器中使用has_one來包括屬ActiveRecord關聯。
因此,在您的情況下,請使用has_one
而不是belongs_to
:
has_one :addonable, serializer: DepotSerializer, polymorphic: true
經過測試,可以在我的項目中使用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.