Как передать параметры Active Model Serializer другому Serializer? - PullRequest
0 голосов
/ 08 апреля 2020

возникли проблемы с отправкой параметров. У меня есть user_serializer и book_serializer, и я хочу отправить user_id в book_serializer внутри user_serializer. Например:

class UserSerializer < ActiveModel::Serializer
   attributes :id

   has_many :books, serializer: BookSerializer, your_option_name: object.id
end

, а затем BookSerializer

class BookSerializer < ActiveModel::Serializer
   attributes :id, :test

  def test
     @instance_options[:your_option_name]
  end
end

, но он не работает, обнуляется.

есть идеи? большое спасибо.

1 Ответ

1 голос
/ 08 апреля 2020

Аргументы, которые вы передали в has_many ..., фактически используются для создания HasManyReflection объекта, который принимает только очень определенные c значения и не передает свой аргумент дальше.

Правильный способ передачи пользовательского аргумента во вложенные сериализаторы - через метод build_association или напрямую, как показано ниже:

class UserSerializer < ActiveModel::Serializer
  attributes :id, books

  def books
    ActiveModel::SerializableResource.new(object.books,  each_serializer: BookSerializer, your_option_name: object.id) 
  end
end
...