Передать параметры хэша через новый синтаксис 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