0

シリアライザレベルでjsonレスポンスに表示される子を制限しようとしています。通貨が「有効」とマークされている場合、その通貨はマーチャントのペイロードに含まれます。通貨が「非アクティブ」の場合、マーチャント上のGETは含めないでください。属性の値に基づく条件付きシリアル化

レール、4.2.5 active_model_serializers、〜>私はinclude_currency_mapsを作ってみた

を試してみた何0.10.0.rc3

シリアライザ

class MerchantSerializer < ActiveModel::Serializer 
    attributes :id, :merchant_name, :merchant_type, :currencies 
    has_many :merchant_currency_maps 
end 

class MerchantCurrencyMapSerializer < ActiveModel::Serializer 
    attributes :id, :currency, :b4flight_id, :aht_account_id, :created_at, :updated_at, :guess_merchant 
end 

方法linkしかし、役に立たない。
カスタム属性を作成すると、hereと表示されます。しかし、私はまだこれがどうやって行なわれなければならないかを把握するのに苦労しています。

答えて

1

あなたの質問を正しく理解している場合は、has_many :merchant_currency_mapsには有効な通貨マップのみを含めるようにします。あなたはMerchantSerializerでオーバーライドを試みることができる:

def merchant_currency_maps 
    object.merchant_currency_maps.where(active: true) 
end 
+0

これは滑らかです。とても有難い。 – CheeseFry

0

これはレールが良く、私は信じてあなたのデータをキャッシュすることができます使用:

has_many :merchant_currency_maps, -> { where(active: true) } 

またはこの

has_many :active_merchant_currency_maps, -> { where(active: true) } 
has_many :merchant_currency_maps 
has_many :inactive_merchant_currency_maps, -> { where(active: false) } 

それぞれがキャッシュされるだろうか別々に。これで心配するのは、3つのアレイのそれぞれが異なるオブジェクトを持ち、レールを同期させるように設定されていない限り、同期が外れることがあります。

関連する問題