Câu hỏi này gắn liền với AMS 0.8kích hoạt mẫu serializers belongs_to
Tôi đã có hai mô hình:
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
Và hai 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
Khi một UserCombination
là serialized, Tôi muốn nhúng toàn bộ cây con của các đối tượng.
Khi tôi cố gắng sử dụng thiết lập này, tôi nhận được lỗi này:
undefined method `belongs_to' for UserCombinationSerializer:Class
tôi đã cố gắng thay đổi UserCombinationSerializer
này:
class UserCombinationSerializer < ActiveModel::Serializer
attributes :id, :subject, :stage
end
Trong trường hợp này tôi nhận được không có lỗi, nhưng subject
là tuần tự theo cách sai - không sử dụng SubjectSerializer
.
Câu hỏi của tôi:
- nên tôi không thể sử dụng một mối quan hệ belongs_to trong serializer?
- Nếu không - làm thế nào tôi có thể có được hành vi mong muốn - nhúng cây chủ đề bằng cách sử dụng SubjectSerializer?
Được rồi, yeah, công trình này. Tôi nghĩ rằng tôi hiểu phương pháp 'has_one' tốt hơn bây giờ. Trong một 'Serializer', điều duy nhất thú vị là liệu một phương thức trả về một hay nhiều đối tượng. Vì vậy, phân biệt giữa has_one và thuộc_to không phải là thú vị. Đó là một kinda suboptimal rằng từ ngữ trùng với thuật ngữ ActiveRecord, vì các điều khoản không có nghĩa là cùng một điều. – Jesper
Tôi đã gặp phải sự cố tương tự này gần đây. Có, sử dụng thuộc tính has_one: làm việc cho tôi. –
Các tài liệu cho 'ActiveModel :: Serializer' explictly tiểu bang:" Serializers chỉ quan tâm đến multiplicity, và không sở hữu. Thuộc về ActiveRecord hiệp hội có thể được bao gồm bằng cách sử dụng has_one trong serializer của bạn. " – awendt