I found where the problem lies (for this case).
The situation is that I am including a related resource (in this case “Product”) in the GET and relying on the public of default_fields set for that resource.
If I set the default_fields for the main “base” resource (in my case “Survey”) in the base_route, then the included resource isn’t queried for its fields.
However if I set the default_fields for the main “base” resource in the resource module itself (inside the json_api block), then the other related resources is asked for it’s fields.
The problem is due to the logic at line 675 of the AshJsonApi.Serializer where fields is determined to be one of three lists.
fields =
Map.get(request.fields, resource) || Map.get(request.route, :default_fields) ||
default_attributes(resource)
If I manually swap the second and third parts then the default_fields on the route itself isn’t used when there are default fields set for the resource. And of course default_attributes has logic that will look to the explicit default_fields or the public attributes.
So a workaround is to just set the fields to be used as defaults in the resource and not in the route (in this case), but I’d be interested to hear what approach makes most sense.
FWIW, I’ll also post this in the issues list for the project.
Thanks
Martin






















