为了账号安全,请及时绑定邮箱和手机立即绑定

Rails:depend =>:destroy VS:depend =>:delete_all

Rails:depend =>:destroy VS:depend =>:delete_all

ABOUTYOU 2019-12-09 14:57:00
在导轨中的描述如下:如果对象与关联,则将另外销毁;如果与关联:dependent => :destroy,则将其删除。:dependent => :delete_all是的,很酷。但是被销毁和被删除有什么区别?我都尝试过,似乎做同样的事情。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

区别在于回调。


将:delete_all直接在您的应用程序,并通过SQL删除:


DELETE * FROM users where compagny_id = XXXX

使用:destroy,您所有孩子的实例化。因此,如果您无法销毁它,或者每个销毁了自己的:dependent,则可以调用其回调。


查看完整回答
反对 回复 2019-12-09
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

在Rails的模型关联上,您可以指定:dependent选项,该选项可以采用以下三种形式之一:

  • :destroy/:destroy_all通过调用它们的destroy方法,关联的对象与该对象一起被销毁

  • :delete/:delete_all所有关联的对象将立即销毁,而无需调用其:destroy方法

  • :nullify所有关联对象的外键都设置为NULL不调用其save回调


查看完整回答
反对 回复 2019-12-09
?
GCT1015

TA贡献1827条经验 获得超4个赞

请参阅destroy删除其关联元素 ,其中delete_all可以从self表中删除多个数据,如下所示DELETE * FROM table where field = 'xyz'

:取决于可能的选项:

控制销毁所有者时关联对象发生的情况。注意,这些被实现为回调,并且Rails按顺序执行回调。因此,其他类似的回调可能会影响:depend行为,并且该:dependent行为可能会影响其他回调。

:destroy 导致所有关联的对象也被破坏。

:delete_all 使所有关联的对象直接从数据库中删除(因此将不执行回调)。

:nullify导致将外键设置为NULL。不执行回调。

:restrict_with_exception 如果存在任何关联的记录,则会引发异常。

:restrict_with_error 如果存在任何关联的对象,则会导致将错误添加到所有者。

如果与:through选项一起使用,则联接模型上的关联必须是一个Emirates_to,并且被删除的记录是联接记录,而不是关联的记录。


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 578 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信