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.