How to: Keyset pagination in AshJsonApi

When I enable keyset pagination in my read action, I get an error
** (KeyError) key :metadata not found in: #SomeAshResource..
** (KeyError) key :metadata not found in: #SomeAshResource..
Using offset pagination works, but doesnt show me the pagination metadata in the response either, just first/last page links This is my read action:
read :read do
primary? true
pagination keyset?: true, default_limit: 15, countable: true, max_page_size: 100
end
read :read do
primary? true
pagination keyset?: true, default_limit: 15, countable: true, max_page_size: 100
end
Are there any examples of Keyset pagination with ash?
4 Replies
ZachDaniel
ZachDaniel2y ago
Can I see a stack trace for that error? I think that may be a bug. And it’s also possible that we haven’t set up keyset pagination with ash_json_api. Likely a relatively easy thing to rectify.
gordoneliel
gordonelielOP2y ago
Rest of stacktrace:
(ash_json_api 0.33.0) lib/ash_json_api/serializer.ex:321: AshJsonApi.Serializer.add_prev_link/4
(ash_json_api 0.33.0) lib/ash_json_api/serializer.ex:171: AshJsonApi.Serializer.many_links/2
(ash_json_api 0.33.0) lib/ash_json_api/serializer.ex:43: AshJsonApi.Serializer.serialize_many/4
(ash_json_api 0.33.0) lib/ash_json_api/controllers/response.ex:51: AshJsonApi.Controllers.Response.render_many/6
(membership_service 0.1.0) deps/plug/lib/plug/router.ex:246: anonymous fn/4 in MembershipServiceWeb.Memberships.Router.dispatch/2
(telemetry 1.2.1) /Users/gordoneliel/Documents/Classly/Dev/membership_service/deps/telemetry/src/telemetry.erl:321: :telemetry.span/3
(membership_service 0.1.0) deps/plug/lib/plug/router.ex:242: MembershipServiceWeb.Memberships.Router.dispatch/2
(membership_service 0.1.0) lib/membership_service_web/memberships_router.ex:1: MembershipServiceWeb.Memberships.Router.plug_builder_call/2
(phoenix 1.7.7) lib/phoenix/router/route.ex:42: Phoenix.Router.Route.call/2
(phoenix 1.7.7) lib/phoenix/router.ex:430: Phoenix.Router.__call__/5
(membership_service 0.1.0) lib/membership_service_web/endpoint.ex:1: MembershipServiceWeb.Endpoint.plug_builder_call/2
(membership_service 0.1.0) lib/membership_service_web/endpoint.ex:1: MembershipServiceWeb.Endpoint."call (overridable 3)"/2
(membership_service 0.1.0) deps/plug/lib/plug/debugger.ex:136: MembershipServiceWeb.Endpoint."call (overridable 4)"/2
(membership_service 0.1.0) lib/membership_service_web/endpoint.ex:1: MembershipServiceWeb.Endpoint.call/2
truncated........
(ash_json_api 0.33.0) lib/ash_json_api/serializer.ex:321: AshJsonApi.Serializer.add_prev_link/4
(ash_json_api 0.33.0) lib/ash_json_api/serializer.ex:171: AshJsonApi.Serializer.many_links/2
(ash_json_api 0.33.0) lib/ash_json_api/serializer.ex:43: AshJsonApi.Serializer.serialize_many/4
(ash_json_api 0.33.0) lib/ash_json_api/controllers/response.ex:51: AshJsonApi.Controllers.Response.render_many/6
(membership_service 0.1.0) deps/plug/lib/plug/router.ex:246: anonymous fn/4 in MembershipServiceWeb.Memberships.Router.dispatch/2
(telemetry 1.2.1) /Users/gordoneliel/Documents/Classly/Dev/membership_service/deps/telemetry/src/telemetry.erl:321: :telemetry.span/3
(membership_service 0.1.0) deps/plug/lib/plug/router.ex:242: MembershipServiceWeb.Memberships.Router.dispatch/2
(membership_service 0.1.0) lib/membership_service_web/memberships_router.ex:1: MembershipServiceWeb.Memberships.Router.plug_builder_call/2
(phoenix 1.7.7) lib/phoenix/router/route.ex:42: Phoenix.Router.Route.call/2
(phoenix 1.7.7) lib/phoenix/router.ex:430: Phoenix.Router.__call__/5
(membership_service 0.1.0) lib/membership_service_web/endpoint.ex:1: MembershipServiceWeb.Endpoint.plug_builder_call/2
(membership_service 0.1.0) lib/membership_service_web/endpoint.ex:1: MembershipServiceWeb.Endpoint."call (overridable 3)"/2
(membership_service 0.1.0) deps/plug/lib/plug/debugger.ex:136: MembershipServiceWeb.Endpoint."call (overridable 4)"/2
(membership_service 0.1.0) lib/membership_service_web/endpoint.ex:1: MembershipServiceWeb.Endpoint.call/2
truncated........
ZachDaniel
ZachDaniel2y ago
@gordoneliel since I've been on vacation I wasn't able to address this, but as far as I can tell this is likely just a typo referring to .metadata instead of .__metadata__ I can fix later, but if you want to make a PR we can get it merged
gordoneliel
gordonelielOP2y ago
I can do that!

Did you find this page helpful?