Ich verwende den aktiven Modell-Serializer . Ich habe ein Modellereignis, das viele Aktivitäten hat.
Ich möchte die Veranstaltung mit den ersten n Aktivitäten zurückgeben. Ich denke, ich sollte die Parameter n an den Ereignisserialisierer übergeben.
Ich verwende den aktiven Modell-Serializer . Ich habe ein Modellereignis, das viele Aktivitäten hat.
Ich möchte die Veranstaltung mit den ersten n Aktivitäten zurückgeben. Ich denke, ich sollte die Parameter n an den Ereignisserialisierer übergeben.
Antworten:
Übergebene Optionen sind über den @optionsHash verfügbar . Wenn Sie dies tun:
respond_with @event, activity_count: 5
Sie können @options[:activity_count]innerhalb des Serializers verwenden.
we recommend that any new projects you start use the latest 0.8.x version of this gem. This version is the most widely used, and will most closely resemble the forthcoming release.
@optionsschien nicht für mich zu funktionieren, es stellte sich heraus, dass der Hash @instance_optionsstattdessen geändert wurde . Das hat es für mich getan.
In der Version müssen ~> 0.10.0Sie verwenden @instance_options. Verwenden Sie das @ Jon Gold-Beispiel von oben:
# 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
Der @optionsHash wurde entfernt 0.9; sieht aus wie eine äquivalente Methode wurde kürzlich hinzugefügt -
def action
render json: @model, option_name: value
end
class ModelSerializer::ActiveModel::Serializer
def some_method
puts serialization_options[:option_name]
end
end
serialization_optionssollte auf 0.9 funktionieren, aber es scheint, als würde man 0.8 verwenden und @optionsist der einzige Weg, der im Moment funktioniert.
Mit 0.9.3 können Sie #serialization_options wie folgt verwenden ...
# 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
Ab 0.10dem aktiven Modell Serializer können Sie beliebige Optionen über den Pass instance_optionsVariable wie gesehen hier .
# 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
serialization_options funktioniert gut mit Active Model Serialization 0.9.3.
Auf die mit dem Befehl render übergebenen Optionen kann im Serializer mit ihren Schlüsseln zugegriffen werden -> serialization_options [: key]
Ein einfacher Weg ist, einfach die Aktivitätsmethode im Ereignisserialisierer hinzuzufügen und n Aktivitäten zurückzugeben. Das ist es.
class EventSerializer < ActiveModel::Serializer
has_many :activities
def activities
object.activities[0..9] # Select whatever you want
end
end