Я использую ActiveModel :: Serializer в моем приложении rails-api. У меня есть полиморфная ассоциация под название addonable:active_model_serializers association as:
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
Но я не могу найти ничего подобного. Это возможно? Заранее спасибо
Для тех, кто использует rails-api/active_model_serializers. Можно указать: ключ. Так что в моем случае это будет принадлежать_to: addonable, serializer: DepotSerializer, polymorphic: true, key:: depot – hcarreras