2016-07-19 13 views
0

Ich habe ein Problem in meinem Rails 4.2.6 Projekt mit ActiveModel Serializern (v0.10.2). Das Problem, das ich habe, ist, wenn kein Serializer an den Render-Aufruf im Controller übergeben wird, Rails keinen Serializer verwenden und das Objekt wie normal rendern. Die Übergabe des Serialisierungsklassennamens funktioniert jedoch wie erwartet.ActiveModel Serializer wird die Serializer-Klasse nicht implizit nachschlagen, um json serialisiert zu bekommen muss der Serializer explizit übergeben werden

render json: @tag # renders the whole object as if just to_json was called 
render json: @tag, serializer: API::V1::TagSerializer # renders it correctly through the serializer 

Derzeit ist die Steuerung dies in einem versioniert api Namespace ist API::V1::Tags

ich einen action_model_serializers initializer haben, und es ist Inhalt:

ActiveModelSerializers.config.adapter = :json_api 
ActiveModelSerializers.config.key_transform = :camel_lower 
ActiveModelSerializers.config.serializer_lookup_enabled = true 

Und mein Serializer liegt in app/serializers/api/v1/tag_serializer.rb:

class API::V1::TagSerializer < ApplicationSerializer 
    attributes :id, :name, :created_at, :updated_at 

    has_many :taggings, serializer: API::V1::TaggingSerializer 

    link :self do 
    api_v1_tag_url(object, host: 'localhost:3000') 
    end 
end 

Ich bin nicht qui Sicher, was ist falsch, ich habe versucht, alles neu zu starten, habe ich ActionController::Serialization in meinem Anwendungscontroller, nichts, was ich versuche funktioniert.

Unsicher, ob dies ein verwandtes Problem, aber auch nach include: 'taggings' auf die Render-Funktion und die has_many :taggings, serializer: API::V1::TaggingSerializer in dem Serializer hinzugefügt, das einzige, was in den Beziehungen gemacht wird, ist die Tagging-ID und type: 'taggings'

Antwort

0

ich hatte das gleiche Problem, und ich habe auch Namensabstände gemacht. Ich denke, this answer and comments sind immer noch relevant

Da ich wollte wirklich Namespace meine Serialisierer (API: v1), so dass ich neue Serialisierer in der nächsten Version austauschen konnte, behielt ich nur den ausdrücklichen Aufruf. Wenn es eine bessere Antwort gibt, würde ich gerne davon hören