簡體   English   中英

active_model_serializers關聯為:

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM