Übergeben von Parametern an ActiveModel Serializer

69

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.

Bruce Xinda Lin
quelle

Antworten:

47

Ü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.

Logan Serman
quelle
7
Ab AMS 0.9.0 funktioniert dies nicht mehr. Da AMS keine Dokumentation, kein Wiki und keine Diskussionsforen hat, scheint dies derzeit eine Sackgasse zu sein.
Robin Daugherty
1
Das scheint nicht zu funktionieren. Wo ist die Dokumentation dazu?
David
2
Verwenden Sie die Version 0.8 sicherer, wenn Sie können, da dies vom AMS-Team empfohlen wird. 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.
Bigtex777
21
@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.
the_critic
110

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
Eric Norcross
quelle
Ich kann das nicht zum Laufen
bringen
42

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
Jon Gold
quelle
4
Ich habe die Gem-Version 0.9 (aktualisiert, um sicherzugehen), aber sowohl die Optionen als auch die serialization_options funktionieren nicht. Dies ist der Fehler undefinierte lokale Variable oder Methode `serialization_options '
Ganeshran
1
Ganeshran ist richtig. 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.
jmosesman
12

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
wintondeshong
quelle
9

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
jubeless
quelle
8

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]

Pushp Raj Saurabh
quelle
-2

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
Mohanraj
quelle
1
Außer Sie haben fest codiert, welche Aktivitäten zurückgegeben werden. Der gesamte Punkt des 'Options'-Hashs besteht darin, dass die API dem Verbraucher eines Endpunkts verschiedene Optionen zur Verfügung stellt.
rmcsharry