serializers rails new custom as_json active ruby-on-rails active-model-serializers

ruby on rails - rails - Cómo pasar parámetros al serializador ActiveModel



rails serializer nested (7)

A partir del 0.10 del serializador de modelo activo , puede pasar opciones arbitrarias a través de la variable instance_options como se ve here .

# posts_controller.rb class PostsController < ApplicationController def dashboard render json: @post, user_id: 12 end end # post_serializer.rb class PostSerializer < ActiveModel::Serializer attributes :id, :title, :body def comments_by_me Comments.where(user_id: instance_options[:user_id], post_id: object.id) end end

Estoy usando el serializador de modelo activo . Tengo un evento modelo que tiene muchas actividades.

Quiero devolver el evento con las primeras n actividades. Creo que debería pasar el parámetro n al serializador de eventos.


El hash @options fue eliminado en 0.9 ; Parece que recientemente se agregó un método equivalente.

def action render json: @model, option_name: value end class ModelSerializer::ActiveModel::Serializer def some_method puts serialization_options[:option_name] end end


En la versión ~> 0.10.0 necesitas usar @instance_options . Usando el ejemplo de @Jon Gold de arriba:

# 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


La forma simple es simplemente agregar el método de actividades en el serializador de eventos y devolver n número de actividades. Eso es.

class EventSerializer < ActiveModel::Serializer has_many :activities def activities object.activities[0..9] # Select whatever you want end end


Usando 0.9.3 puedes usar #serialization_options como así ...

# 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 funciona bien con Active Model Serialization 0.9.3.

Se puede acceder a las opciones pasadas junto con el comando de renderización en el serializador usando sus teclas -> serialization_options [: key]


Las opciones pasadas están disponibles a través del hash @options . Así que si lo haces:

respond_with @event, activity_count: 5

Puede usar @options[:activity_count] dentro del serializador.