Ich arbeite an einem Back-End einer Anwendung in Sinatra geschrieben. Es hat eine Route "/ Benachrichtigungen"wie benutzerdefinierte Serializer in Sinatra-Anwendung aufrufen
, die alle Benachrichtigungen in JSON rendert. Ich möchte die JSON-Struktur ändern und schrieb einige benutzerdefinierte Serializer und es ist jetzt fehlgeschlagen. der Fehler i erhalten ist
"{"message":"undefined method `read_attribute_for_serialization' for nil:NilClass"}"
Ich habe eine Datei mit dem Namen webservice/notification.rb , die eine Benachrichtigung Serializer auswählt. der Code ist so etwas wie dieses
serializer = NotificationSerializer
json serialize(notifications, root: :notifications, each_serializer: serializer)
Die NotificationSerializer ist so etwas wie dieses.
class NotificationSerializer < Serializer
attributes :id, :tag, :event, :time, :read
has_one :reference, polymorphic: true, include: true
Die Referenz hier kann eine Menge Dinge sein.
das Benachrichtigungsmodell definiert Referenz als
def reference
company || contact || deal || invitation || meeting || todo || reference_email || reference_user ||
contact_import_job
end
jetzt alle diese Modelle in Bezug haben es Serializer im Verzeichnis implementiert Serializer/* Ich möchte benutzerdefinierte Serializer für alle diese machen, die nur begrenzte Informationen übertragen werden. Wie kann ich meinen eigenen Serializer für Dinge innerhalb der Referenz aufrufen.
Ich schrieb einen benutzerdefinierten Serializer für Benachrichtigungen und nannte es so in meiner Referenzfunktion und es funktionierte.
...|| UserNotificationSerializer.new(reference_user) || ...
aber wenn ich das gleiche für meine anderen Modelle mache, bekomme ich den oben angegebenen Fehler. was wäre der richtige Weg, um meine benutzerdefinierten Serialisierer aufzurufen.