5

Est-il possible d'inclure conditionnellement une association has_one dans un sérialiseur de modèle actif, enregistrement par enregistrement?Associations conditionnelles de sérialiseur de modèle actif

Dans mon cas, je n'ai pas besoin de retourner une association appelée "groupe" si le groupe est du type "invisible". Voici un extrait de mon sérialiseur.

class PostFeedSerializer < ActiveModel::Serializer 
    attributes :id, :title, :thumbnail_photo, :view_count, :ago, :created_by 
    has_one :group, serializer: GroupSerializer 

Ce que je voudrais faire est quelque chose à l'effet de:

has_one :group, serializer: GroupTinySerializer unless object.get_group.invisible? 
+0

Est-groupe ont un champ appelé 'invisible'? Et avez-vous défini des méthodes comme 'invisible?' Et 'get_group' ou ce n'est qu'un exemple. –

+0

Oui, get_group et invisible? sont des méthodes existantes. – Dan

Répondre

12

En supposant que vous êtes using version ~> 0.8.0, vous devriez être en mesure de mettre les éléments suivants dans votre PostFeedSerializer.

def include_group? 
    !object.get_group.invisible? 
end 

Cela conditionnellement l'objet group chaque fois include_group? renvoie true.

On dirait in future versions, AMS sera de passer à filter au lieu de include_x? méthodes.

+1

Merci Aron. C'est la chose la plus cool depuis le pain tranché! – Dan

+1

Il pourrait être plus froid que le pain tranché. Les deux sont bons cependant. – Fuser97381

+1

où est la documentation pour cela? – Jwan622

1

Pour toute personne qui utilise une version plus récente du modèle actif sérialiseur, la solution serait:

def filter(keys) 
    keys.delete :group unless !object.get_group.invisible? 
    keys 
    end 

Vous pouvez également faire:

has_one :group, serializer: GroupTinySerializer, unless: -> { invisible? } 

def invisible? 
    object.get_group.invisible? 
end 
+0

J'ai peur du nouveau Serializer Active Model. Trop de changement. – Dan

+1

J'ai ajouté une autre façon d'obtenir le même résultat. N'ayez pas peur de changer ma petite sauterelle. – FutoRicky

Questions connexes