我正在为Phoenix应用程序中的user
和role
模型定义一个架构。角色has_many
用户和用户belongs_to
是角色。似乎有3个不同的on_delete:
选项:nilify_all
,nothing
(默认)和delete_all
。
当我查看Ecto.Schema页面时,我并没有真正找到每个页面的定义。
nilify_all
,nothing
和delete_all
有什么区别-什么时候应该使用它们?
答案 0 :(得分:2)
on_delete
选项指定在删除记录时相关记录应如何处理。
考虑您的示例,其中role
有很多users
:
delete_all
:删除父记录时,删除关联的记录。例如,在您的情况下,删除role
将删除与该角色关联的所有users
。
nilify_all
:在删除父记录时,这会将关联表中指向父记录的键设置为nil
。例如,当删除某个角色时,这会将role_id
表中的users
设置为属于该角色的那些用户中的nil
。
nothing
:删除父记录后,这不会对关联的记录做任何事情。但是,如果关联表将外键约束放回父表,则会引发错误。