Setting a nested resource to nil
will drop the key #230
Description
I want to be able to delete a nested resource when I get a nested attribute set to nil
.
Currently have an API that lets you manage nested resources. The model update logic expects the client to set an explicit nil
when it wants to remove one of these related resources.
For example I have an API that exposes the People in the system. Those people have an optional Address.
To delete the address from a person set the address
parameter to nil
.
Everything works fine with the nested address attributes set:
>> params = ActionController::Parameters.new({people: [{ name: "Amy Pond", address: { town: "Leadworth", street: "Cathedral Rd" } }] })
=> {
"people"=>[{
"name"=>"Amy Pond",
"address"=>{
"town"=>"Leadworth",
"street"=>"Cathedral Rd"
}
}]
}
>> params.permit(:people, :people => [:name, :address => [:town, :street]])
=> {
"people"=>[{
"name"=>"Amy Pond",
"address"=> {
"town"=>"Leadworth",
"street"=>"Cathedral Rd"
}
}]
}
But if the nested attributes is set to nil, it gets dropped:
>> params2 = ActionController::Parameters.new({people: [{ name: "Amy Pond", address: nil }] })
=> {
"people"=>[{
"name"=>"Amy Pond",
"address"=>nil
}]
}
>> params2.permit(:people,
:people => [:name, :address => [:town, :street]])
=> {"people"=>[{"name"=>"Amy Pond"}]}
=> {
"people" => [{
"name"=>"Amy Pond"
}]
}
This feels like it might be inconsistent because when I permit the scalar address
on that same params hash, it will retain the nil
key:
>> params2.permit(:people,
:people => [:name, :address])
=> {
"people" => [{
"name"=>"Amy Pond",
"address"=> nil
}]
}
Is this the desired behavior, or would it be preferred to retain the nil
value?
I havn't looked into implemntation, but would be happy to work in a PR if this is a desired behavior.
Activity