2016-03-27 6 views
0

Ich arbeite eine JSON-API mit Ruby-On-Rails auf den Aufbau 4.Ruby On Rails 4 - Serialisierer rief nicht

Um meine JSON Antworten serialisiert, verwende ich active_model_serializers Version 0.9.4.

Ich habe einen ApiController, der von ApplicationController erbt. Alle meine Controller erben von ApiController. Hier

ist, was ApiController wie folgt aussieht:

class Api::ApiController < ApplicationController 
    include ActionController::Serialization 
    private 

    def respond_with_json(payload) 
     render json: payload, root: false, status: 200 
    end 
end 

ich eine FriendshipSerializer erstellt haben, zugeordnet Freundschaft Model, mit rails g serializer friendship. Dies erzeugt die folgende Datei:

class FriendshipSerializer < ActiveModel::Serializer 
    attributes :id, :image 
end 

Hier ist der Code von friendships#index Controller-Aktion:

def index 
    friendships = current_user.friendships.order(created_at: "DESC") 
    respond_with_json(friendships) 
end 

Das Problem, das ich bin zur Begegnung ist, wenn friendships#index Controller-Aktion aufrufen, es gibt ein JSON-Array mit allen Freundschaft Modellieren Sie Daten, während sie nur IDs (laut FriendshipSerializer) zurückgeben soll.

+0

Welche Version von active_model_serializers? – prusswan

+0

Ich verwende "0.9.4" –

+0

Was passiert, wenn Sie den Serializer angeben? https://github.com/rails-api/active_model_serializers/tree/0-9-stable#arrays – prusswan

Antwort

1

Da es funktioniert, wenn die Serialisierer explicitly specified sind, vermute ich, dass dies ein bekanntes Problem ist (Autoloading von Serializern funktioniert in einigen Fällen nicht, was ein Fehler sein kann, da dies durch Störungen von anderen Edelsteinen verursacht werden könnte). Wenn Sie damit leben können (oder einen Workaround finden), können Sie weiterhin mit 0.9 arbeiten (was mehr "kampferprobt" ist), ansonsten versuchen Sie die aktuelle Version 0.10 zu verwenden. Beachten Sie, dass zwischen diesen Versionen einige wichtige Änderungen vorgenommen werden.

1

Ich bemerke ein paar Schreibfehler in Ihrer Frage. Sind Sie sicher, dass die Klassennamen von Modell und Serializer übereinstimmen? Wenn Ihre Modellklasse beispielsweise "Freundschaft" heißt, sucht AMS nach einem Serializer namens "FriendshipSerializer". Wenn AMS diesen Serializer nicht findet, glaube ich, dass er die Attribute des Datensatzes unabhängig von einem Serializer weitergibt; Wenn Sie also ein "Friendship" -Modell und "FrienshipSerializer" (oder umgekehrt) haben, könnte das das Problem sein.

+0

Ich habe keine Kopie einfügen von meinem Projektcode gemacht. Ich habe den ganzen Code selbst geschrieben ... Ich habe meinen Ruby-Code überprüft und alles ist in Ordnung –