2

多態性の関係のデフォルトシリアライザをオーバーライドしようとしています。私が持っている: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 
+0

あなたはこれに対して良い解決策を見つけましたか?また、これらの多態性シリアライザのn + 1の負荷を防ぐための考え方はありますか? –

+0

他の誰かがこれに問題があるなら、私は実際にはmodel.class.to_sの代わりにmodel.classが必要でした – Marky

答えて

0

あなたがBELONGS_TO使用することができます:届出&ブロックオプションを指定してそこにフィットシリアライザを指定します。

関連する問題