Передать параметры хэша через новый синтаксис ArraySerializer

Можно ли вызвать конструктор ArraySerializer следующим образом:

  mi_tmp[:notes]=ActiveModel::ArraySerializer.new(mi.notes, each_serializer: NotesSerializer, show_extra:false)

а затем в сериализаторе:

  .....
  if @options[show_extra]
    attributes :user_id
  end

Я получаю ошибку:

Ошибка: неопределенная локальная переменная или метод show_extra для NotesSerializer:Class

но не могу найти пример с использованием этого типа синтаксиса. Спасибо

редактировать 1

Первое, что я попробовал, но без игры в кости:

  mi_tmp[:notes]=ActiveModel::ArraySerializer.new(mi.notes, each_serializer: NotesSerializer, @options{ show_extra: false } )

2 ответа

Это может быть полезно для вас, и его работа хорошо для меня

1. В книжном контроллере

# books contain a collection of books

books = serialize books, BookSerializer, {root: false, user_book_details: user_book_details}

# custom method

def serialize data, serializer, options = {}
    data.map do |d|
      serializer.new(d, options)
    end    
end

2. В книжном сериализаторе

class BookSerializer < ActiveModel::Serializer

  def initialize object, options = {}
    @user_book_details = options[:user_book_details]
    super object, options
  end

  attributes :id, :title, :short_description, :author_name, :image, :time_ago, :has_audio, :book_state

  # You can access @user_book_details anywhere inside the serializer

end

Если вы хотите динамически сериализовать атрибуты, вам нужно использовать магию include_xxx? методы:

class NotesSerializer < ActiveModel::Serializer
  attributes :user_id

  def include_user_id?
    @options[:show_extra]
  end
end
Другие вопросы по тегам