vt-elixir / ja_resource

A behaviour to reduce boilerplate code in your JSON-API compliant Phoenix controllers without sacrificing flexibility.
Other
113 stars 33 forks source link

Removing associations when null #66

Open lxcodes opened 7 years ago

lxcodes commented 7 years ago

This may be some what related to #45, but currently it looks like setting parent_id works for both create and update but permitted_attributes isn't getting nil attributes in order to remove them from what I can see. I can remove an association if I directly pass in parent_id => nil in attributes though.

Wondering if this was the intended way to update a resource to remove an association: PATCH [http://localhost:4000/api/classifications/3]

{
    "data":{
        "id":"3",
        "attributes":{
            "name":"Top Level Classification"
        },
        "relationships":{
            "parent":{
                "data": null
            }
        },
        "type":"classifications"
    }
}

Phoenix Params:

Parameters: %{"data" => %{"attributes" => %{"name" => "Top Level Classification"}, "id" => "3", "relationships" => %{"parent" => %{"data" => nil}}, "type" => "classifications"}, "id" => "3"}

JaResource attrs passed into permitted_attributes:

Before Update Attrs: %{"name" => "Top Level Classification", "type" => "classifications"}

Should there be a "parent_id" => nil there?

Schema:

  schema "classifications" do
    field :name, :string

    belongs_to :parent, Classification, on_replace: :update
    has_many :children, Classification, foreign_key: :parent_id, on_delete: :delete_all

    timestamps()
  end
psteininger commented 4 years ago

@lxcodes thanks for filing this. I will take a look at this in the coming days, as I will be working on something similar.