2017-01-12 3 views
1

Учитывая следующий код контроллера:Есть ли доступ к директиве `include` внутри активного класса сериализатора модели?

def show 
    render json: @post, include: 'author', adapter: :json_api 
end 

Внутри сериализатором у меня есть доступ к include директивы?

class PostSerializer < ActiveModel::Serializer 
    attributes :title, :body, :foo 
    belongs_to :author 

    def foo 
    # can I gain access to the include_directive here somehow? 
    end 
end 

Я посмотрел в @attributes, @instance_options, @object, @root@scope и @serializer_class (все переменные экземпляра я могу видеть pry), не повезло.

Я использую active_model_serializers (0.10.2).

+0

Да, вы можете использовать его, используя '@options [: include]'. –

+0

@PriyankGupta был, возможно, доступен до '0.10'? Я смотрю '@ options' в моем сериализаторе, и это' nil'. –

+0

Попробуйте, 'json: {post: @post, include: 'author', adapter:: json_api}' –

ответ

0

Опция include передается адаптеру. Адаптер использует его по существу, передавая его в serializable_hash в каждом сериализаторе. Итак, вы можете переопределить этот метод, осмотреть его и позвонить супер

В противном случае я не уверен, что вы пытаетесь сделать.

+0

Спасибо за понимание @ BF4. По какой-то причине мой переопределение никогда не попадает при вызове с контроллера. Также это похоже на то, что оно помечено как private api. Я не думаю, что мы хотим переопределить частный метод, чтобы получить доступ к этой информации. Я исключил детали того, что мы пытаемся выполнить, потому что я не хотел, чтобы кто-то сосредоточился на том, что делал код, а сосредоточился исключительно на директиве includes. Я ценю помощь, но, не имея доступной информации, мы можем просто использовать другой подход. ура –

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

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