Mam kilka modeli w Rails, które wyglądają mniej więcej tak:boczny załadunek przedmiotów o niestandardowych nazw klas w EmberJS z szynami + active_model_serializers
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
z serializers tak:
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
ta produkuje JSON, który wygląda mniej więcej tak:
{
"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"
}
]
}
problem polega na tym, że side-załadowany reporterów i przedmioty cesjonariusze JSON nie są rozpoznawane przez Ember jako obiekty użytkownika, a widzę następujący błąd:
Uncaught Error: assertion failed: Your server returned a hash with the key reporters but you have no mapping for it
Nie chcesz usunąć
embed :ids, include: true
z mojego IssueSerializer, ponieważ wtedy komentarze nie będą serializowane.
Istnieje kilka potencjalnych sposobów, aby rozwiązać ten problem, że mam wziąć pod uwagę:
- Jeżeli sposób osadzenia na ActiveModel :: serializer przyjął listę modeli w swojej obejmują opcję, to może filtrować odpowiedź JSON dodawać wyłącznie komentarze poboczne.
- Model danych Ember można skonfigurować do ładowania użytkowników z "użytkowników", "reporterów" i "cesjonariuszy" ... ale z tego, co wiem, wydaje mi się, że obsługuje tylko jeden klucz dla sideloadAs.
- Jakoś ignorować/dezaktywować błędy ładowania bocznego nieznanych kluczy (prawdopodobnie najmniej rozsądne podejście).
Czy jest jeszcze jedna opcja, której tu brakuje? Myślę, że może będę musiał napisać poprawkę i wysłać żądanie ściągnięcia do rails-api/active_model_serializers, emberjs/data lub obu.
EDIT: My tymczasowe obejście tego jest zmiana IssueSerializer tylko szeregować identyfikatory dla reportera i cesjonariusza:
class IssueSerializer < ActiveModel::Serializer
attributes :id, :reporter_id, :assignee_id
embed :ids, include: true
has_many :comments, :embed => :ids
end
Czy możesz pokazać swój model problemu? –
Twoja odpowiedź poniżej jest zgodna z prawdą. – benburton
Jakiej wersji Ember-danych używasz? –