【发布时间】:2013-09-02 10:10:25
【问题描述】:
我想使用 Active Model Serializers 序列化关系,并且我想为此关系设置一些“全局”属性(例如计数):
{
users: {
total: 12,
page: 2,
users: [{}, {}, {}, ...]
}
}
我该怎么做?
【问题讨论】:
标签: ruby-on-rails active-model-serializers
我想使用 Active Model Serializers 序列化关系,并且我想为此关系设置一些“全局”属性(例如计数):
{
users: {
total: 12,
page: 2,
users: [{}, {}, {}, ...]
}
}
我该怎么做?
【问题讨论】:
标签: ruby-on-rails active-model-serializers
在控制器中调用渲染期间,您可以传入元属性。
render @users, :each_serializer => UserSerializer, :meta => { :total => @users.count }
这将产生以下 JSON:
{
"users" : [...],
"meta" : {
"total" : 12
}
}
您可以通过传入meta_key 选项来重命名元键名称。
【讨论】:
您可以在序列化程序中定义计算属性:
class FooSerializer < ActiveModel::Serializer
attributes :users_count
has_many :users
def users_count
object.users.size
end
end
【讨论】:
正如指出的那样,这不会对count 进行多次数据库调用
@rmcshry
{
data: ActiveModelSerializers::SerializableResource.new(
@users, each_serializer: UserSerializer).as_json,
count: @users.count
}
【讨论】: