我有一个模型的Active Model JSON Serializer,它有一个has_many关系,我希望包含在JSON响应中。
我希望将记录包含在has_one
而不是has_many
记录中 - 仅包含第一条记录:
class PersonSerializer < ActiveModel::Serializer
attributes :name, :symbol
has_many :stats
has_many :body_parts
end
此处,body_parts
应返回为has one :body_part
。最好的方法是什么?
答案 0 :(得分:2)
如果您只想返回第一个body_part
并仅在序列化工具响应中执行此操作,那么最好将其定义为PersonSerializer
中的方法。
class PersonSerializer < ActiveModel::Serializer
attributes :name, :symbol
has_one :body_part, serializer: BodyPartSerializer
...
def body_part
self.object.body_parts.first
end
end
它假定您为BodyPart
型号设置了单独的序列化程序。
答案 1 :(得分:0)
不是那么简单:
class Person
def body_part
body_parts.first
end
# or
has_one :body_part, -> { order(id: :asc) }
end
class PersonSerializer < ActiveModel::Serializer
attributes :name, :symbol
has_many :stats
has_one :body_part
end
在这两种情况下,您都需要具体说明第一个正文部分的确切含义。