Active Record的depend::destroy是否也会删除数据库记录?
例如:依赖::删除
是的,两者都会删除数据库记录,但删除的方式不同。
你可以在这里查看这个问题的答案。
Rails :dependent => :destroy VS :dependent => :delete_all。
基本上 dependent: :delete
将直接在数据库中执行对依赖记录的删除,而不执行任何activerecod验证或回调。
而 dependent: :destroy
将实例化所有依赖记录,并执行一个 :destroy
为每个对象执行验证和回调)。
: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。
删除的作用是什么?
删除文件基本上,使用delete使用与id参数匹配的主键,使用SQL DELETE语句删除数据库中的行,并返回删除的行数。你可以通过传递一个id的Array来一次删除多条记录。但调用delete时,仅此而已。后面就没有其他事情发生了。
Destroy的作用是什么?
销毁文档 正如你所看到的,使用destroy也可以从表中删除一个给定的id(或id)。然而,一个对象是先被实例化的,因此在对象被 "删除 "之前,所有的回调和过滤器都会被启动。由于在对象被 "删除 "之前执行了额外的回调和验证,这个方法比ActiveRecord#delete效率低,但是它允许运行清理方法和其他操作。本质上,这个方法会找到给定的id,从属性中创建一个新的对象,然后对其调用destroy(执行任何依赖和回调)。