nilify_all,nothing和delete_all之间的ecto.Schema区别?

时间:2018-10-31 22:27:31

标签: schema ecto phoenix

我正在为Phoenix应用程序中的userrole模型定义一个架构。角色has_many用户和用户belongs_to是角色。似乎有3个不同的on_delete:选项:nilify_allnothing(默认)和delete_all

当我查看Ecto.Schema页面时,我并没有真正找到每个页面的定义。

nilify_allnothingdelete_all有什么区别-什么时候应该使用它们?

1 个答案:

答案 0 :(得分:2)

on_delete选项指定在删除记录时相关记录应如何处理。

考虑您的示例,其中role有很多users

  • delete_all:删除父记录时,删除关联的记录。例如,在您的情况下,删除role将删除与该角色关联的所有users

  • nilify_all:在删除父记录时,这会将关联表中指向父记录的键设置为nil。例如,当删除某个角色时,这会将role_id表中的users设置为属于该角色的那些用户中的nil

  • nothing:删除父记录后,这不会对关联的记录做任何事情。但是,如果关联表将外键约束放回父表,则会引发错误。