使用ActiveModel :: Serializer序列化具有属性的数组/关系

时间:2013-09-02 10:10:26

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

我想使用Active Model Serializers序列化关系,我想为此关系设置一些“全局”属性(例如count):

{
  users: {
    total: 12,
    page: 2,
    users: [{}, {}, {}, ...]
  }
}

我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

在控制器中进行渲染调用期间,您可以传入元属性。

render @users, :each_serializer => UserSerializer, :meta => { :total => @users.count }

这将生成以下JSON:

{
  "users" : [...],
  "meta" : {
    "total" : 12
  }
}

您可以通过传递meta_key选项来重命名元键名称。

答案 1 :(得分:3)

您可以在序列化程序中定义计算属性:

class FooSerializer < ActiveModel::Serializer
  attributes :users_count
  has_many :users

  def users_count
    object.users.size
  end
end

答案 2 :(得分:0)

这不会对count进行多个数据库调用,如 @rmcsharry

 { 
    data: ActiveModelSerializers::SerializableResource.new(
            @users, each_serializer: UserSerializer).as_json,
    count: @users.count 
 }