依赖性破坏不起作用
我试图使用依赖::破坏但没有成功。
让我们举一个简单的例子。 我用以下内容创建一个简单的应用程序:
rails g model parent rails g model child parent:references
将以下行添加到parent.rb
has_many :children, dependent: :destroy
我在rails console(rails c)中进行了以下测试
p = Parent.create! c = Child.create! c.parent = p c.save #check association Child.first == Child.first.parent.children.first p.delete #This should return 0 Child.count == 0
而Child.count返回1。
我错过了什么?
谢谢
4.2.2.4:依赖
如果将:dependent
选项设置为:
-
:destroy
,当对象被销毁时,将在其关联对象上调用#destroy
。 -
:delete
,当对象被销毁时,它的所有相关对象将直接从数据库中删除 而不调用它们的#destroy
方法。
根据您的设置,您必须执行p.destroy
。
:dependent
选项可以具有不同的值,用于指定删除的完成方式。 有关更多信息,请参阅有关此选项的文档,了解不同的特定关联类型。 如果没有给出选项 ,则在销毁记录时,行为是对关联的记录不执行任何操作。
对于has_many
, destroy
和destroy_all
将始终调用要删除的记录的destroy
方法,以便运行回调。 但是delete
和delete_all
将根据:dependent
选项指定的策略进行删除,或者如果没有给出:dependent
选项,则它将遵循默认策略。 默认策略是:nullify
( 将外键设置为nil ),但has_many :through
除外,其中默认策略为delete_all
(删除连接记录,不运行其回调)。
在ActiveRecord派生对象上调用delete
方法将发出直接DELETE
语句来执行数据库,跳过任何ActiveRecord回调和配置,例如dependent: destroy
。
我相信你想要destroy
方法。
您还可以在数据库中设置外键并将其设置为在删除时级联,这可能是有意义的,具体取决于您的需要。