2013-09-02 2 views
1

Par exemple, j'ai une representer ressemblant à:Comment filtrer les propriétés/collections des représentants?

module AccountRepresenter 

    include Roar::Representer::JSON 
    include Roar::Representer::Feature::Hypermedia 

    property :id 
    property :name 

    collection :assets, :extend => AssetRepresenter, :class => Asset 
end 

Dans contrôleur je l'utilise comme:

respond_with @accounts, represent_with: AccountsRepresenter 

Pour une autre action, je ne veux pas collection :assets à présenter. J'ai essayé

respond_with @accounts, represent_with: AccountsRepresenter, exclude: :assets 

Mais cela ne fonctionne pas. Comment devrais-je transmettre l'argument aux représentants?

Répondre

2

La gemme Roar utilise Représentable dessous (https://github.com/apotonick/representable#conditions). Vous pouvez faire les choses suivantes pour avoir une fonctionnalité conditionnelle:

respond_with @accounts, represent_with: AccountsRepresenter, exclude: [:assets] 

Puis

module AccountRepresenter 

    include Roar::Representer::JSON 
    include Roar::Representer::Feature::Hypermedia 

    property :id 
    property :name 

    collection :assets, extend: AssetRepresenter, if: lambda { |opts| !opts[:exclude].includes?(:assets)] } 
end 
Questions connexes