我有一个Grape API,该API具有一个命名空间:admin
和一个ride资源,整个路径是
http://localhost:3000/api/admin/trips
module Admin
class Base < API::Core
namespace :admin do
before { authenticate_admin! }
resources :rides do
mount TripsAPI
end
end
end
end
module Admin
class TripsAPI < Base
desc 'Returns all rides grouped by user ordered by date ascending'
get do
Ride.order(date: 'asc').group_by(&:user)
end
# ...
end
end
我想返回这样的数据结构:
data: {
[
{email: '...', first_name: '...', rides: [ride1, ride2, ...]},
{email: '...', first_name: '...', rides: [ride1, ride2, ...]}
]
}
或类似,易于在前端使用。我希望所有游乐设施按用户分组并按日期升序排列,更具体地说。如何仅从用户资源中检索几个属性,并以简单的消耗方式为前端骑行?我尝试使用JSONAPI::Resources
,我有一个RideResource
和UserResource
,但是如果我查询端点,它将返回所有属性,因此它不起作用。我知道我可以简单地解析数据并在Ruby中手动构建响应,但想知道是否有某种方法可以使用某种序列化程序来实现这一点。
class RideResource < JSONAPI::Resource
attributes :start_address
belongs_to :user
end
我应该在routes.rb
中放入任何内容吗?
我的路线现在看起来像这样:
mount API::Core => '/'
我也尝试过使用admin对资源进行命名空间设置,但这不起作用。
module Admin
class RideResource < JSONAPI::Resource
attributes :start_address
belongs_to :user
end
end
我将不胜感激,因为我找不到很好的文档来做到这一点。我应该使用其他与Grape兼容的宝石吗?