Я использую активный сериализатор модели. У меня есть модельное событие, в котором есть действия.
Я хочу вернуть событие с первыми действиями n. Я думаю, что мне нужно передать параметры n в сериализатор событий.
Я использую активный сериализатор модели. У меня есть модельное событие, в котором есть действия.
Я хочу вернуть событие с первыми действиями n. Я думаю, что мне нужно передать параметры n в сериализатор событий.
Доступные опции доступны через хэш @options
. Итак, если вы это сделаете:
respond_with @event, activity_count: 5
Вы можете использовать @options[:activity_count]
внутри сериализатора.
В версии ~> 0.10.0
вам нужно использовать @instance_options
. Используя пример @Jon Gold сверху:
# controller
def action
render json: @model, option_name: value
end
# serializer
class ModelSerializer::ActiveModel::Serializer
def some_method
puts @instance_options[:option_name]
end
end
Хэш @options
удален в 0.9
; похоже, что эквивалентный метод был недавно добавлен -
def action
render json: @model, option_name: value
end
class ModelSerializer::ActiveModel::Serializer
def some_method
puts serialization_options[:option_name]
end
end
Используя 0.9.3, вы можете использовать #serialization_options, например...
# app/serializers/paginated_form_serializer.rb
class PaginatedFormSerializer < ActiveModel::Serializer
attributes :rows, :total_count
def rows
object.map { |o| FormSerializer.new(o) }
end
def total_count
serialization_options[:total_count]
end
end
# app/controllers/api/forms_controller.rb
class Api::FormsController < Api::ApiController
def index
forms = Form.page(params[:page_index]).per(params[:page_size])
render json: forms, serializer: PaginatedFormSerializer, total_count: Form.count, status: :ok
end
end
serialization_options отлично работает с Active Serialization 0.9.3.
Параметры, переданные вместе с командой render, могут быть доступны в сериализаторе, используя их ключи → serialization_options [: key]
простой способ - просто добавить метод действий в сериализатор событий и вернуть n количество действий. Вот и все.
class EventSerializer < ActiveModel::Serializer
has_many :activities
def activities
object.activities[0..9] # Select whatever you want
end
end