Diese Frage bezieht sich auf AMS 0,8Aktiv Modell Serializer belongs_to
Ich habe zwei Modelle bekam:
class Subject < ActiveRecord::Base
has_many :user_combinations
has_ancestry
end
class UserCombination < ActiveRecord::Base
belongs_to :stage
belongs_to :subject
belongs_to :user
end
Und zwei Serializer:
class UserCombinationSerializer < ActiveModel::Serializer
attributes :id
belongs_to :stage
belongs_to :subject
end
class SubjectSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :subjects
def include_subjects?
object.is_root?
end
def subjects
object.subtree
end
end
Wenn ein UserCombination
serialisiert, Ich möchte den gesamten Teilbaum der Themen einbetten.
Wenn ich versuche, diese Einstellung zu verwenden, bekomme ich diesen Fehler:
undefined method `belongs_to' for UserCombinationSerializer:Class
Ich versuchte, die UserCombinationSerializer
zu diesem Wechsel:
class UserCombinationSerializer < ActiveModel::Serializer
attributes :id, :subject, :stage
end
In diesem Fall habe ich keine Fehler, aber der subject
ist falsch serialisiert - nicht mit der SubjectSerializer
. Meine Fragen
:
- Soll ich nicht in der Lage sein, eine belongs_to Beziehung in den Serializer zu benutzen?
- Wenn nicht - wie bekomme ich das gewünschte Verhalten - Einbetten des Themenbaums mit dem SubjectSerializer? Diese
Okay, ja, das funktioniert. Ich glaube, ich verstehe die 'has_one' Methode jetzt besser. In einem 'Serializer' ist nur interessant, ob eine Methode ein oder mehrere Objekte zurückgibt. Eine Unterscheidung zwischen has_one und soars_to ist nicht interessant. Es ist ein bisschen suboptimal, dass der Wortlaut mit der ActiveRecord-Terminologie übereinstimmt, da die Begriffe nicht dasselbe bedeuten. – Jesper
Ich stieß gerade vor kurzem auf dasselbe Problem. Ja, das Attribut has_one: funktioniert für mich. –
Die Dokumentation für 'ActiveModel :: Serializer' gibt ausdrücklich an:" Serialisierer befassen sich nur mit der Multiplizität und nicht mit dem Besitz. Zu ActiveRecord-Zuordnungen können Sie mit has_one in Ihrem Serializer hinzufügen. " – awendt