2016-07-23 21 views
1

Ich habe ein einfaches Modell:aktive Modell-Serialisierer respond_with verursacht undefinierte Methode "to_model"?

class Receipt 
    include ActiveModel::Serialization 
    attr_accessor :products 
end 

und mein Controller tut:

def create 
    respond_with receipt, :serializer => ReceiptSerializer 
end 

und den Serializer:

class ReceiptSerializer < ActiveModel::Serializer 
    attributes :products 
end 

und ich bekomme:

NoMethodError: 
    undefined method `to_model' for #<Receipt:0x007f99bcb3b6d8> 

Doch wenn ich ändern meine Controller:

def create 
    json = ReceiptSerializer.new(receipt) 
    render :json => json 
end 

dann funktioniert alles gut ... was geschieht ???

Ich verwendete active_model_serializers 0.9.3, aber gerade versucht 0.10.2, und die Ergebnisse sind die gleichen.

Antwort

0

Ich bin mir nicht ganz sicher, aber es scheint in Ihrem Empfang PORO, sollten Sie lieber einschließen: ActiveModel::SerializerSupport.

kann ich nicht bestätigen, ob das für active_model_serializers 0.10.2 obwohl

0

In all der Dokumentation arbeitet die ich gelesen habe und persönliche Umsetzung ich render json: statt respond_with verwenden.

render json: receipt, serializer: ReceiptSerializer 

Ich glaube, dass respond_with von Schienen entfernt worden ist und nicht eine beste Praxis mehr berücksichtigt, aber ich kann nicht einen Link zu bestätigen diese Behauptung finden.

+0

oh, ich dachte, respond_with war die richtige Art, ActiveModelSerializers zu verwenden? Hat sich das geändert? – patrick

+0

Ich habe es nie in den 6 Jahren der Verwendung von Rails so verwendet. Aber das bedeutet nicht, dass es nicht zu einer bestimmten Zeit der richtige Weg war. https://github.com/rails-api/active_model_serializers/blob/master/docs/general/rendering.md – Genzume

+0

reply_with verschoben zu einem Juwel: https://stackoverflow.com/questions/25998437/why-is-respond- mit-von-Schienen-4-2-in-its-own-gem-entfernt werden –