0

Я пытаюсь ограничить, какие дети будут отображаться в ответ json на уровне сериализатора. Если валюта отмечена как «активная», валюта должна быть включена в полезную нагрузку для Merchant. Если валюта «неактивна», GET на продавца не следует включать.Условная сериализация основана на значении атрибута

рельсы, 4.2.5 active_model_serializers, ~> 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 

Что я пробовал

Я попытался сделать include_currency_maps методы 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 массивов имеет разные объекты и может перестать синхронизироваться, если у вас нет рельсов, настроенных для их синхронизации.