2016-04-01 5 views
1

Ich habe folgende Serializer Klasse:Wie definiert man benutzerdefinierte Attribute für ActiveModel Serializer nach Objektparametern?

class BooksSerializer < ActiveModel::Serializer 
    attributes :name, :position 
    attributes :pages unless object.children.present? 

Aber es ist nach unten fällt mit einem Fehler „nicht definierte Methode` Objekt‘für SectionSerializer: Klasse“. Wie kann ich Objektparameter für diese Bedingungen erhalten?

Ich kann Zugriff auf Objekt nur innerhalb der Funktion erhalten. Zum Beispiel:

def pages 
    object.pages .... 
end 

Aber ich muss einige Felder von der Serialisierung durch Bedingungen ausschließen.

Antwort

2

fand ich eine Lösung:

class BooksSerializer < ActiveModel::Serializer 
    attributes :name 
    def attributes(*args) 
     hash = super 
     hash[:pages] = pages unless object.children.present?   
     hash 
    end 

    def pages 
    .... 
    end 
    .... 
end