2016-03-30 5 views
1

Я пишу сериализатор, который включает в себя has_one :source. source может быть нескольких типов. Я пытаюсь сделать JSON меньше, когда source является Foo по overriding the association methods. Я попытался это:Условное переопределение метода ассоциативной ассоциации серийных операторов

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

Но тогда я получаю не метод суперкласса `источник».

Тогда я попробовал:

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

Но что ошибки уровень стека слишком глубоко; по-видимому, это бесконечная рекурсия.

Как я могу условно переопределить метод ассоциации?

ответ

1

Вызов сериалайзер непосредственно работал:

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

мне пришлось использовать object.source вместо source, чтобы избежать рекурсии.

 Смежные вопросы

  • Нет связанных вопросов^_^