Laden von Objekten mit nicht standardmäßigen Klassennamen in EmberJS mit Rails + active_model_serializers
Ich habe ein paar Modelle in Rails, die ungefähr so aussehen:
class Issue < ActiveRecord::Base
belongs_to :reporter, class_name: 'User'
belongs_to :assignee, class_name: 'User'
has_many :comments
end
class User < ActiveRecord::Base
end
class Comment < ActiveRecord::Base
end
mit Serialisierern wie folgt:
class IssueSerializer < ActiveModel::Serializer
attributes :id
embed :ids, include: true
has_one :reporter, :embed => :ids
has_one :assignee, :embed => :ids
end
class UserSerializer < ActiveModel::Serializer
attributes :id, :name
end
class CommentSerializer < ActiveModel::Serializer
attributes :id, :body
end
Dies erzeugt JSON, das ungefähr so aussieht:
{
"issues": [
{
"id": 6,
"reporter_id": 1,
"assignee_id": 2,
"comment_ids": [
3
]
},
],
"comments": [
{
"id": 3
"body": "Great comment"
}
],
"reporters": [
{
"id": 1
"name": "Ben Burton"
}
],
"assignees": [
{
"id": 2
"name": "Jono Mallanyk"
}
]
}
Das Problem besteht darin, dass die JSON-Objekte der von der Seite geladenen Reporter und Beauftragten von Ember nicht als Benutzerobjekte erkannt werden und der folgende Fehler angezeigt wird:
Uncaught Error: assertion failed: Your server returned a hash with the key reporters but you have no mapping for it
Ich möchte nicht entfernen
embed :ids, include: true
aus meinem IssueSerializer, da sonst die Kommentare nicht serialisiert würden.
Es gibt ein paar mögliche Möglichkeiten, dies zu lösen, über die ich nachgedacht habe:
Wenn die Einbettungsmethode für ActiveModel :: Serializer eine Liste von Modellen in der Include-Option akzeptiert, kann dies dazu führen, dass die JSON-Antwort so gefiltert wird, dass nur Kommentare von der Seite geladen werden.Das Modell von Ember Data könnte so konfiguriert werden, dass Benutzer von "Benutzern", "Reportern" und "Beauftragten" auf der Seite geladen werden. Soweit ich aus der Quelle entnehmen kann, scheint es nur einen Schlüssel für SideloadAs zu unterstützen.Ignoriere / deaktiviere irgendwie Seitenladefehler für unbekannte Schlüssel (wahrscheinlich der am wenigsten vernünftige Ansatz).Gibt es eine andere Option, die ich hier vermisse? Möglicherweise muss ich einen Fix schreiben und eine Pull-Anfrage an Rails-API / Active_Model_Serializers, EmberJS / Data oder an beide senden.
BEARBEITEN: Meine vorübergehende Problemumgehung besteht darin, den IssueSerializer so zu ändern, dass nur die IDs für den Reporter und den Verantwortlichen serialisiert werden:
class IssueSerializer < ActiveModel::Serializer
attributes :id, :reporter_id, :assignee_id
embed :ids, include: true
has_many :comments, :embed => :ids
end