Closed mhanberg closed 2 years ago
Hey sorry for the delay on this. Yes you are right, this does seem broken. Looking at the spec, it seems like the correct response would be %{"data" => nil }
. I'm surprised I haven't run into this before so I'll see if I can reproduce it. Stay tuned.
I'm running into a semi-related problem. The JaSerializer.Builder.ResourceIdentifier.build
function is causing the data
key on a %JaSerializer.Builder.Relationship{}
to be set to :empty_relationship
.
The JaSerializer.Builder.Relationship.build
function has an empty?
function that operates on that struct and seems to be missing handling for this. If I add: defp empty?(%__MODULE__{data: :empty_relationship, links: nil, meta: nil}), do: true
to JaSerializer.Builder.Relationship
, the relationship (correctly IMO) does not appear in the output.
Perhaps the same change would fix this issue?
@lucas-nelson Looking into how we handle empty relationships elsewhere, I don't believe stripping out the relationship is always the right approach. In the case of a link where the parent ID is used, I believe we still want to return the links because they are valid.
For example, if we had this:
defmodule ArticleSerializer do
use JaSerializer
has_one(
:author,
link: "/articles/:id/author",
serializer: PersonSerializer,
)
end
We would still want it serialized since the link could technically still be valid:
"relationships": {
"author": {
"links": {
"related": "/articles/1/author"
},
"data": null
},
Instead what I'm going to do is remove any broken links from the links array when it's serialized. This seems to satisfy the JSON API spec where it says:
If present, a related resource link MUST reference a valid URL, even if the relationship isn’t currently associated with any target resources. Additionally, a related resource link MUST NOT change because its relationship’s content changes.
So then in @mhanberg 's original example, the response would just be %{"data" => nil}
Problem
I currently have a relationship that looks like so
This results in the code rendering a broken links. The results resembling
I feel like there should not be any links rendered, as there is no resource to link to.
Am I missing the way to do this or is this broken?
Thanks