To pytanie dotyczy AMS 0,8Aktywni Serializers model belongs_to
Mam dwa modele:
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
i dwa serializers:
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
Kiedy UserCombination
jest seryjny, Chcę osadzić całe poddrzewo obiektów.
Kiedy próbuję użyć tej konfiguracji otrzymuję ten błąd:
undefined method `belongs_to' for UserCombinationSerializer:Class
Próbowałem zmieniając UserCombinationSerializer
do tego:
class UserCombinationSerializer < ActiveModel::Serializer
attributes :id, :subject, :stage
end
W tym przypadku otrzymuję żadnych błędów, ale subject
jest serializowane w niewłaściwy sposób - nie używając SubjectSerializer
.
Moje pytania:
- nie powinienem być w stanie korzystać z relacji belongs_to w serializatora?
- Jeśli nie - jak uzyskać pożądane zachowanie - osadzenie drzewa tematów przy użyciu obiektu SubjectSerializer?
Ok, tak, to działa. Myślę, że teraz lepiej rozumiem metodę 'has_one'. W 'Serializatorze', jedyną ciekawostką jest to, czy metoda zwraca jeden lub wiele obiektów. Zatem rozróżnianie między has_one i belongs_to nie jest interesujące. Jest to trochę suboptymalne, że sformułowanie pokrywa się z terminologią ActiveRecord, ponieważ terminy nie oznaczają tego samego. – Jesper
Wpadłem ostatnio na ten sam problem. Tak, użycie atrybutu has_one: działa dla mnie. –
Dokumentacja dla "ActiveModel :: Serializer" wyraźnie stwierdza: "Serializatory dotyczą tylko mnogości, a nie własności. Belongs_to Asocjacje ActiveRecord mogą być zawarte za pomocą has_one w serializatorze." – awendt