Подтвердить что ты не робот

Как передать параметры в сериализатор ActiveModel

Я использую активный сериализатор модели. У меня есть модельное событие, в котором есть действия.

Я хочу вернуть событие с первыми действиями n. Я думаю, что мне нужно передать параметры n в сериализатор событий.

4b9b3361

Ответ 1

Доступные опции доступны через хэш @options. Итак, если вы это сделаете:

respond_with @event, activity_count: 5

Вы можете использовать @options[:activity_count] внутри сериализатора.

Ответ 2

В версии ~> 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

Ответ 3

Хэш @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

Ответ 4

Используя 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

Ответ 5

serialization_options отлично работает с Active Serialization 0.9.3.

Параметры, переданные вместе с командой render, могут быть доступны в сериализаторе, используя их ключи → serialization_options [: key]

Ответ 6

простой способ - просто добавить метод действий в сериализатор событий и вернуть n количество действий. Вот и все.

class EventSerializer < ActiveModel::Serializer

  has_many :activities

  def activities
    object.activities[0..9] # Select whatever you want
  end
end