2016-03-30 6 views
1

Ich schreibe einen Serializer, der has_one :source enthält. source kann eine Reihe von verschiedenen Arten sein. Ich versuche, den JSON kleiner zu machen, wenn source ein Foo von overriding the association methods ist. Ich versuchte dies:Bedingt überschreiben einer aktiven Modell-Serializer-Assoziationsmethode

def source 
    return super unless source_type == 'Foo' 
    render json: source, serializer: LimitedFooSerializer 
end 

Aber dann bekomme ich keine übergeordnete Klasse Methode `source‘.

Dann habe ich versucht:

def source 
    render json: source unless source_type == 'Foo' 
    render json: source, serializer: LimitedFooSerializer 
end 

Aber dass Fehler Stack-Ebene zu tief; Vermutlich ist es eine unendliche Rekursion.

Wie kann ich bedingt die Assoziationsmethode überschreiben?

Antwort

1

den Serializer Aufruf arbeitete direkt:

def source 
    if source_type == 'Foo' 
    FooSerializer::LimitedFooSerializer.new(object.source) 
    else 
    object.source 
    end 
end 

ich object.source verwenden musste statt source die Rekursion zu vermeiden.

Verwandte Themen