Serialisiert ein array von Modellen mit Hilfe von active_model_serializers

Ich versuche zu senden, die die serialisierte version eines Modells, um eine Ansicht als param, mit der gem active_model_serializers

#app/serializers/admin_serializer.rb
class AdminSerializer < ActiveModel::Serializer
  attributes :id, :email, :access_locked?
end


#app/controllers/dashboard/admins_controller.rb
  def index
    @search = Admin.search(params[:q])
    @admins = @search.result(:distinct => true).page(params[:page]).per(10)

    @page_entries_info = view_context.page_entries_info @admins
    # render json: @admins
    respond_to do |format|
      format.html
      format.js
      format.json {render json: @admins}
    end
  end



#app/views/dashboard/admins/index.html.erb
  <%= debug (ActiveModel::Serializer::Adapter.adapter_class(:json_api).new(ActiveModel::Serializer.serializer_for(@admins.first).new(@admins.first),{}).to_json) %>
  <%= debug (@admins.all.map{|admin| AdminSerializer.new(admin).to_json}) %>

Oben debuggt werden, woraus sich die unten Antwort:

--- '{"data":{"id":"1","type":"admins","attributes":{"email":"[email protected]","access_locked?":false}}}' //returned by the first debug


---
- '{"object":{"id":36,"email":"[email protected]","created_at":"2016-03-28T05:15:17.546Z","updated_at":"2016-03-28T05:15:17.546Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":20,"email":"[email protected]","created_at":"2016-03-28T05:15:16.304Z","updated_at":"2016-03-28T05:15:16.304Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":22,"email":"[email protected]","created_at":"2016-03-28T05:15:16.459Z","updated_at":"2016-03-28T05:15:16.459Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":37,"email":"[email protected]","created_at":"2016-03-28T05:15:17.624Z","updated_at":"2016-03-28T05:15:17.624Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":5,"email":"[email protected]","created_at":"2016-03-28T05:15:15.139Z","updated_at":"2016-03-28T05:15:15.139Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":14,"email":"[email protected]","created_at":"2016-03-28T05:15:15.838Z","updated_at":"2016-03-28T05:15:15.838Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":27,"email":"[email protected]","created_at":"2016-03-28T05:15:16.848Z","updated_at":"2016-03-28T05:15:16.848Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":2,"email":"[email protected]","created_at":"2016-03-28T05:15:14.873Z","updated_at":"2016-03-28T05:15:14.873Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":10,"email":"[email protected]","created_at":"2016-03-28T05:15:15.527Z","updated_at":"2016-03-28T05:15:15.527Z"},"instance_options":{},"root":null,"scope":null}'
- '{"object":{"id":15,"email":"[email protected]","created_at":"2016-03-28T05:15:15.916Z","updated_at":"2016-03-28T05:15:15.916Z"},"instance_options":{},"root":null,"scope":null}'

In der ersten debug-ich bin serialisieren nur ein Objekt, während in der zweiten eine, die ich versuche zu tun, es für ein array von Objekten.
Die erste debug ist richtig, Rücksendung der serialisierte version des Objekts(in json_api-format), während der zweite debug nicht.
Versucht ArraySerializer als auch mit keinen Erfolg: ActiveModel::Serializer::ArraySerializer.new(@admins, each_serializer: AdminSerializer).as_json
wie kann ich erreichen der gewünschten Serialisierung. Außerdem, wenn es gelingt, kann ich einige andere vereinfachte version dieser? Wie diese debug Anweisung wird viel zu ausführlich.

Habe versucht, alle Lösungen, die hier erwähnt - Wie wollen Sie die Initialisierung der ActiveModel::Serializer-Klasse mit ein ActiveRecord::Relation-array?

Das grundlegende problem, welches ich versuche zu lösen ist, in der index-Methode der Admin-controller, der Admin-Objekt übergeben, als PORO um die index.html Datei. Aber ich will das serialisierte json-version dieses Objekts, so dass ich übergeben es an meinen Komponenten reagieren als requisite

index-Methode rendert die richtige json auf brennen http://dashboard.localhost.com:3000/admins.json
Serialisiert ein array von Modellen mit Hilfe von active_model_serializers

UPDATE#1 für die index-Methode

def index
    @search = Admin.search(params[:q])
    @admins_array = @search.result(:distinct => true).to_a
    if params[:page]
      @admins = @search.result(:distinct => true).page(params[:page][:number]).per(10)
      @admins_json_array = Kaminari.paginate_array(@admins_array).page(params[:page][:number]).per(10)
    else
      @admins = @search.result(:distinct => true).page(1).per(10)
      @admins_json_array = Kaminari.paginate_array(@admins_array).page(1).per(10)
    end
    @admins_json = ActiveModel::SerializableResource.new(@admins_json_array.to_a)
    ...
    ...
    ...
end
  • Sie haben ein repo könnte ich Klonen und versuchen, diese in?
  • Nein, ich kann das nicht tun. Nicht privilegiert genug
  • Machen Sie ein kleines repository mit gerade genug code, um das problem reproduzieren?
InformationsquelleAutor vipin8169 | 2016-03-29
Schreibe einen Kommentar