Rails model 关联删除

easonlovewan · 发布于 2015年07月28日 · 最后由 limanxian 回复于 2015年07月29日 · 1307 次阅读

我有一张权限表,里边儿存放着权限的信息,也包涵着一级和二级权限的关系! 我之前做删除操作的时候,先判断father_id是否为0,如果是0的话得到所有子 权限,然后循环删除子权限,再删除一级权限;如果删除二级权限的话,直接 删除没问题!!! 想问一下有没有更好的解决方案:通过dependent: :destroy这个属相在一张表中 的删除该怎么配置?

共收到 8 条回复

个人局的可以加个callback,删除后级联删除关联权限

能吐槽下father_id吗。。parent_id不好听吗2333

#2楼 @Arthur_h 随后就改😊

这是 has_one 和 has_many 上的用法:

参数 含义
:destroy 删除拥有的资源
:delete 直接发送删除命令,不会执行回调
:nullify 将拥有的资源外键设为 null
:restrict_with_exception 如果拥有资源,会抛出异常,也就是说,当它 has_one 为 nil 或 has_many 为 [] 的时候,才能正常删除它自己
:restrict_with_error 如有拥有资源,会增加一个 errors 信息。

我用 restrict_with_error,先删子资源,再删上一级。

在 belongs_to 上,也可以设置 dependent,但它只有两个参数:

参数 含义
:destroy 删除它所属的资源
:delete 删除它所属的资源,直接发送删除命令,不会执行回调

我觉得可以用self joins,应该很简单。手册的例子: class Employee < ActiveRecord::Base has_many :subordinates, class_name: "Employee", foreign_key: "manager_id"

belongs_to :manager, class_name: "Employee" end

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册