Rails活动记录中依赖性销毁与依赖性删除之间的区别[重复]。

问题描述 投票:0回答:2

Active Record的depend::destroy是否也会删除数据库记录?

例如:依赖::删除

ruby-on-rails rails-activerecord
2个回答
2
投票

是的,两者都会删除数据库记录,但删除的方式不同。

你可以在这里查看这个问题的答案。

Rails :dependent => :destroy VS :dependent => :delete_all。

基本上 dependent: :delete 将直接在数据库中执行对依赖记录的删除,而不执行任何activerecod验证或回调。

dependent: :destroy 将实例化所有依赖记录,并执行一个 :destroy 为每个对象执行验证和回调)。


2
投票

:destroy选项从数据库中加载每个依赖记录,并调用该对象的destroy方法。:delete选项直接从数据库中删除每条记录,而不调用destroy或任何回调。

每个关联类型的文档可以在这里找到。

belongs_to: https:/guides.rubyonrails.orgassociation_basics.html#options-for-belongs-to-dependent选项。

https:/guides.rubyonrails.orgassociation_basics.html#options for-has_one-dependent.htmlhttps:/guides.rubyonrails.orgassociation_basics.html#options-for-has-one-dependent:

有_很多。https:/guides.rubyonrails.orgassociation_basics.html#dependent。


0
投票

删除的作用是什么?

删除文件基本上,使用delete使用与id参数匹配的主键,使用SQL DELETE语句删除数据库中的行,并返回删除的行数。你可以通过传递一个id的Array来一次删除多条记录。但调用delete时,仅此而已。后面就没有其他事情发生了。

Destroy的作用是什么?

销毁文档 正如你所看到的,使用destroy也可以从表中删除一个给定的id(或id)。然而,一个对象是先被实例化的,因此在对象被 "删除 "之前,所有的回调和过滤器都会被启动。由于在对象被 "删除 "之前执行了额外的回调和验证,这个方法比ActiveRecord#delete效率低,但是它允许运行清理方法和其他操作。本质上,这个方法会找到给定的id,从属性中创建一个新的对象,然后对其调用destroy(执行任何依赖和回调)。

© www.soinside.com 2019 - 2024. All rights reserved.