【发布时间】:2016-06-07 13:51:16
【问题描述】:
在 Rails 中做可能需要更复杂/更有创意的解决方案,但基本上使用 Grape、active_model_serializers (AMS) 和 grape-kaminari 来返回用户对象的索引路由(列表),我希望能够使用 AMS 的缓存和轻松序列化对象的优势,但自定义 JSON 响应。
这是葡萄:
module API
module V1
class Users < Grape::API
include API::V1::Defaults
include Grape::Kaminari
resource :users do
paginate per_page: 18
get do
users = User.all
paginate users
end
end
end
end
end
和 AMS:
class UserSerializer < ActiveModel::Serializer
cache key: 'user', expires_in: 3.hours
attributes :id, :firstname, :lastname, :email, :username
end
JSON 中的理想响应:
{
users: [
{
id: 1,
firstname: "Daniel",
lastname: "Archer,
email: "daniel@archer.co",
username: "dja"
},
{
id: 2,
firstname: "Fakey",
lastname: "McFakerson,
email: "fake@fake.io",
username: "fake"
}
],
extras: {
user_count: 300,
new_users_last_5_days: 10,
new_users_last_30_days: 25
}
}
我希望(并且遇到问题)是在 JSON 响应中对用户数量进行分页,但包括一些与整个用户集合相关的额外内容。例如,我可能有 300 个用户,但我只想返回前 18 个用户(或者基于参数 per_page 和 page 的更多用户),以及整个集合的额外数据。
【问题讨论】:
标签: ruby-on-rails pagination kaminari active-model-serializers ruby-grape