Rails活动模型Json序列化程序:将has_many记录作为has_one返回

时间:2017-12-05 11:24:58

标签: ruby-on-rails active-model-serializers

我有一个模型的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。最好的方法是什么?

2 个答案:

答案 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

在这两种情况下,您都需要具体说明第一个正文部分的确切含义。