本问题与AMS 0.8有关
我有两个模型:
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
还有两个序列化器:
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
当序列化一个
UserCombination
时,我想要嵌入整个主题子树。当尝试使用此设置时出现以下错误:
undefined method `belongs_to' for UserCombinationSerializer:Class
我尝试将 UserCombinationSerializer
更改为:
class UserCombinationSerializer < ActiveModel::Serializer
attributes :id, :subject, :stage
end
在这种情况下,我没有收到任何错误,但是
subject
序列化的方式不正确 - 没有使用 SubjectSerializer
。我的问题: 1. 我不能在序列化器中使用 belongs_to 关系吗? 2. 如果不能 - 如何获得所需的行为 - 使用 SubjectSerializer 嵌入主题树?
has_one
方法。在序列化器中,唯一有趣的是一个方法返回一个对象还是多个对象。因此,区分has_one
和belongs_to
并不重要。这种用词与ActiveRecord术语相符合是有点次优的,因为这些术语的意思并不相同。 - JesperActiveModel::Serializer
的文档明确说明:“序列化器只关心多重性,而不关心所有权。您可以在序列化器中使用 has_one 来包含 belongs_to ActiveRecord 关联。” - awendt