I have a recursive resource related to itself.
I can destroy a record with reference :parent, index?: true, on_delete: :delete
and all nested children are deleted by PostgreSQL.
I later found cascade_destroy
. What would it do differently? Would it run the destroy action for all nested children records? Is it useful for soft destroys?
destroy :destroy do
primary? true
change cascade_destroy(:children, action: :destroy)
end
I tried removing on_delete: :delete
and using it, but it didn’t work?
Do I need on_delete: :delete
or deferrable: true
to use cascade_destroy
?
{:error,
%Ash.Error.Invalid{
errors: [
%Ash.Error.Changes.InvalidAttribute{
field: :id,
message: "would leave records behind",
private_vars: [
constraint: "entities_parent_id_fkey",
constraint_type: :foreign_key,
detail: "Key (id)=(02df79f3-8b30-4288-bb50-ac446cc97f41) is still referenced from table \"entities\"."
],
value: nil,
splode: Ash.Error,
bread_crumbs: [],
vars: [],
path: [],
stacktrace: #Splode.Stacktrace<>,
class: :invalid
}
]
}}