多態性の関係のデフォルトシリアライザをオーバーライドしようとしています。私が持っている:Ruby on Rails:多態性結合のための特定のシリアライザを設定してください。
class NotificationListSerializer < ActiveModel::Serializer
attributes :id, :title
belongs_to :notifiable, polymorphic: true
end
notifiable
が組織の場合、組織はOrganizationSerializerとシリアル化されます。 notifiable
がGroupの場合、グループはGroupSerializerでシリアライズされます。これは理にかなっていますが、クラスに応じてどのように別のシリアライザを指定できますか?
たとえば、notifiable
が組織の場合、OrganizationSerializerではなくSparseOrganizationSerializerを使用したいと思います。どうすればこれを達成できますか?
私はこれが文書化されているとはかなり確信していますが、私は苦労して何か事例を見つけています。 documentationから
:
ポリモーフィック関係
ポリモーフィック関係は、他の団体と同様に、関係を指定することでシリアライズされます。例:
class PictureSerializer < ActiveModel::Serializer has_one :imageable end
serializer_forを上書きしてシリアライザを指定できます。多相関係に関する詳細は、各アダプターのテストを参照してください。
あなたは、あなたが定義した条件に基づいて、シリアライザクラスを返すようにActiveModel :: Serializer.serializer_forメソッドをオーバーライドすることができ、あなたの団体のための特定のシリアライザのルックアップを定義したい場合は、アソシエーションシリアライザ検索
をオーバーライド。
class MySerializer < ActiveModel::Serializer def self.serializer_for(model, options) return SparseAdminSerializer if model.class == 'Admin' super end # the rest of the serializer end
あなたはこれに対して良い解決策を見つけましたか?また、これらの多態性シリアライザのn + 1の負荷を防ぐための考え方はありますか? –
他の誰かがこれに問題があるなら、私は実際にはmodel.class.to_sの代わりにmodel.classが必要でした – Marky